diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml new file mode 100644 index 00000000..90419f00 --- /dev/null +++ b/.github/workflows/codeql.yml @@ -0,0 +1,35 @@ +name: CodeQl +on: + push: + branches: + - develop + pull_request: + branches: + - develop + +jobs: + deploy: + name: Running unit tests + runs-on: macos-14 + steps: + - name: Select Xcode version + run: sudo xcode-select -s '/Applications/Xcode_15.2.app/Contents/Developer' + + - name: Checkout repository + uses: actions/checkout@v4.1.1 + + - name: Get current date + run: echo "NOW=$(date +'%Y-%m-%dT%H-%M-%S')" >> $GITHUB_ENV + + - name: Initialize CodeQL + uses: github/codeql-action/init@v3 + with: + languages: "swift" + + - name: Test + run: xcodebuild -scheme KukaiCoreSwift -destination "platform=iOS Simulator,OS=17.2,name=iPhone 15" + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v3 + with: + category: "/language:swift" \ No newline at end of file diff --git a/.github/workflows/docs-and-deploy.yml b/.github/workflows/docs-and-deploy.yml index d977b884..049bc81d 100644 --- a/.github/workflows/docs-and-deploy.yml +++ b/.github/workflows/docs-and-deploy.yml @@ -5,7 +5,7 @@ on: - main jobs: build: - runs-on: macos-latest + runs-on: macos-14 steps: - uses: actions/checkout@v4.1.1 diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index 03147af9..8ef4691d 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -1,6 +1,4 @@ name: Unit Test - -# Run unit tests on every push or pull request, to main or develop on: push: branches: @@ -11,43 +9,74 @@ on: - main - develop -# Checkout the code, and run mxcl's xcodebuild action to run the unit tests jobs: - build: - runs-on: macos-12 - strategy: - matrix: - platform: - - iOS - xcode: - - ^14 + deploy: + name: Running unit tests + runs-on: macos-14 steps: - - uses: actions/checkout@v3.1.0 + - name: Select Xcode version + #run: sudo xcode-select -s '/Applications/Xcode_14.3.1.app/Contents/Developer' + run: sudo xcode-select -s '/Applications/Xcode_15.2.app/Contents/Developer' + + - name: Checkout repository + uses: actions/checkout@v4.1.1 - - name: Initialize CodeQL - uses: github/codeql-action/init@v2 - with: - languages: "swift" + - name: Get current date + run: echo "NOW=$(date +'%Y-%m-%dT%H-%M-%S')" >> $GITHUB_ENV - - uses: mxcl/xcodebuild@v2.0 - with: - platform: ${{ matrix.platform }} - xcode: ${{ matrix.xcode }} - action: test - scheme: KukaiCoreSwift - code-coverage: true - upload-logs: always - - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v2 - with: - category: "/language:swift" + + + # # Temporary step due to Xcode 15 / Github actions runner issues + # - name: Install iOS 16 simulator for Xcode 15 + # run: | + # # Make iOS 16.4 simulator runtime available to Xcode 15 + # sudo mkdir -p /Library/Developer/CoreSimulator/Profiles/Runtimes + # sudo ln -s /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime /Library/Developer/CoreSimulator/Profiles/Runtimes/iOS\ 16.4.simruntime + + # # Create an iOS 16.4 simulator + # xcrun simctl create "iPhone 14 Pro (16.4)" "com.apple.CoreSimulator.SimDeviceType.iPhone-14-Pro" "com.apple.CoreSimulator.SimRuntime.iOS-16-4" + + + + # - name: Install yeetd + # run: | + # wget https://github.com/biscuitehh/yeetd/releases/download/1.0/yeetd-normal.pkg + # sudo installer -pkg yeetd-normal.pkg -target / + # yeetd & + + + + + # - name: Initialize CodeQL + # uses: github/codeql-action/init@v3 + # with: + # languages: "swift" - #- name: Test - # run: xcodebuild -scheme KukaiCoreSwift test -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 12' -enableCodeCoverage YES -resultBundlePath "../../xcode-$GITHUB_RUN_ID.xcresult" - # - #- name: Upload results - # uses: actions/upload-artifact@v2 - # with: - # name: "results-$GITHUB_RUN_ID.xcresult" - # path: "/Users/runner/work/xcode-$GITHUB_RUN_ID.xcresult" + + + # - name: Launch simulator + # run: open -a Simulator --args -CurrentDeviceUDID $(xcrun simctl list --json | ruby -e "require 'json'; puts JSON.parse(ARGF.read)['devices']['com.apple.CoreSimulator.SimRuntime.iOS-17-0'].find { |s| s['name'] == 'iPhone 15' }['udid']") + + + + + - name: Test + #run: xcodebuild test -scheme KukaiCoreSwift -destination "platform=iOS Simulator,OS=16.4,name=iPhone 14" -enableCodeCoverage YES -resultBundlePath "~/xcode-$NOW.xcresult" + run: xcodebuild test -scheme KukaiCoreSwift -destination "platform=iOS Simulator,OS=17.2,name=iPhone 15" -enableCodeCoverage YES -resultBundlePath "~/xcode-$NOW.xcresult" + + + + # - name: Perform CodeQL Analysis + # uses: github/codeql-action/analyze@v3 + # with: + # category: "/language:swift" + + + + - name: Upload results + if: ${{ success() || failure() }} + uses: actions/upload-artifact@v4.3.1 + with: + name: "results-${{ env.NOW }}.xcresult" + path: "~/xcode-${{ env.NOW }}.xcresult" + \ No newline at end of file diff --git a/.jazzy.yaml b/.jazzy.yaml index 243d3ec0..ab792162 100644 --- a/.jazzy.yaml +++ b/.jazzy.yaml @@ -5,4 +5,4 @@ xcodebuild_arguments: - "-scheme" - "KukaiCoreSwift" - "-destination" - - "platform=iOS Simulator,OS=16.2,name=iPhone 14 Pro" \ No newline at end of file + - "platform=iOS Simulator,OS=17.2,name=iPhone 15" \ No newline at end of file diff --git a/Package.swift b/Package.swift index 4fd93ff3..05472fb2 100644 --- a/Package.swift +++ b/Package.swift @@ -12,27 +12,25 @@ let package = Package( .library(name: "KukaiCoreSwift", targets: ["KukaiCoreSwift"]), ], dependencies: [ - .package(name: "KukaiCryptoSwift", url: "https://github.com/kukai-wallet/kukai-crypto-swift", from: "1.0.14" /*.branch("feature/")*/), - //.package(url: "https://github.com/onevcat/Kingfisher.git", from: "7.6.2"), - .package(url: "https://github.com/simonmcl/Kingfisher.git", from: "1.0.0"), - .package(name: "CustomAuth", url: "https://github.com/torusresearch/customauth-swift-sdk", from: "6.0.0"), - .package(url: "https://github.com/simonmcl/SVGKit", from: "3.0.3"), + .package(name: "KukaiCryptoSwift", url: "https://github.com/kukai-wallet/kukai-crypto-swift", from: "1.0.23" /*.branch("develop")*/), + .package(name: "CustomAuth", url: "https://github.com/torusresearch/customauth-swift-sdk", from: "10.0.1"), .package(name: "SignalRClient", url: "https://github.com/moozzyk/SignalR-Client-Swift", from: "0.8.0"), + .package(url: "https://github.com/SDWebImage/SDWebImage.git", from: "5.18.10") ], targets: [ .target( name: "KukaiCoreSwift", dependencies: [ "KukaiCryptoSwift", - "Kingfisher", - "SVGKit", + "SDWebImage", "CustomAuth", "SignalRClient", ], resources: [ .copy("Services/kukai-dex-calculations.js"), .copy("Services/ledger_app_tezos.js"), - .copy("Services/taquito_local_forging.js") + .copy("Services/taquito_local_forging.js"), + .copy("PrivacyInfo.xcprivacy") ] ), diff --git a/Sources/KukaiCoreSwift/Clients/BetterCallDevClient.swift b/Sources/KukaiCoreSwift/Clients/BetterCallDevClient.swift index 726d12cd..6a36aeaf 100644 --- a/Sources/KukaiCoreSwift/Clients/BetterCallDevClient.swift +++ b/Sources/KukaiCoreSwift/Clients/BetterCallDevClient.swift @@ -7,7 +7,6 @@ // import Foundation -import Kingfisher import os.log /// BetterCallDev (BCD) is an indexer/smart contract debugging tool, used for the Tezos blockchain. diff --git a/Sources/KukaiCoreSwift/Clients/DipDupClient.swift b/Sources/KukaiCoreSwift/Clients/DipDupClient.swift index 4254c3b6..49231aae 100644 --- a/Sources/KukaiCoreSwift/Clients/DipDupClient.swift +++ b/Sources/KukaiCoreSwift/Clients/DipDupClient.swift @@ -65,6 +65,8 @@ public class DipDupClient { symbol, address, tokenId, + decimals, + thumbnailUri, exchanges(where: {name: {_in: ["lb", "quipuswap"]}}) { name, tezPool, @@ -77,7 +79,8 @@ public class DipDupClient { decimals, symbol, tokenId, - standard + standard, + thumbnailUri } } } diff --git a/Sources/KukaiCoreSwift/Clients/ObjktClient.swift b/Sources/KukaiCoreSwift/Clients/ObjktClient.swift index 7ce7949a..7e2b57a4 100644 --- a/Sources/KukaiCoreSwift/Clients/ObjktClient.swift +++ b/Sources/KukaiCoreSwift/Clients/ObjktClient.swift @@ -55,13 +55,6 @@ public class ObjktClient { Take in an array of contract addresses, and return a list of the ones that we currently have no metadata for */ public func unresolvedCollections(addresses: [String]) -> [String] { - - // OBJKT doesn't currently support testnet, easy solution to prevent unwanted requests / processing until a solution is found - // But allow for XCTest, which targets testnet - if self.config.networkType == .testnet && !Thread.current.isRunningXCTest { - return [] - } - var unresolved: [String] = [] for add in addresses { if collections[add] == nil { diff --git a/Sources/KukaiCoreSwift/Clients/TezosNodeClient.swift b/Sources/KukaiCoreSwift/Clients/TezosNodeClient.swift index 36bf252f..be52c871 100644 --- a/Sources/KukaiCoreSwift/Clients/TezosNodeClient.swift +++ b/Sources/KukaiCoreSwift/Clients/TezosNodeClient.swift @@ -76,7 +76,7 @@ public class TezosNodeClient { - parameter completion: A callback containing a new `Token` object matching the xtz standard, or an error. */ public func getBalance(forAddress address: String, completion: @escaping ((Result) -> Void)) { - self.networkService.send(rpc: RPC.xtzBalance(forAddress: address), withBaseURL: config.primaryNodeURL) { (result) in + self.networkService.send(rpc: RPC.xtzBalance(forAddress: address), withNodeURLs: config.nodeURLs) { (result) in switch result { case .success(let rpcAmount): let xtz = XTZAmount(fromRpcAmount: rpcAmount) ?? XTZAmount.zero() @@ -98,7 +98,7 @@ public class TezosNodeClient { - parameter completion: A callback containing a String with the delegate/baker's address, or an error. */ public func getDelegate(forAddress address: String, completion: @escaping ((Result) -> Void)) { - self.networkService.send(rpc: RPC.getDelegate(forAddress: address), withBaseURL: config.primaryNodeURL, completion: completion) + self.networkService.send(rpc: RPC.getDelegate(forAddress: address), withNodeURLs: config.nodeURLs, completion: completion) } @@ -194,7 +194,7 @@ public class TezosNodeClient { */ public func getOperationMetadata(forWalletAddress: String, completion: @escaping ((Result) -> Void)) { let dispatchGroup = DispatchGroup() - let url = self.config.primaryNodeURL + let config = self.config var counter = 0 var managerKey: String? = nil @@ -205,7 +205,7 @@ public class TezosNodeClient { // Get manager key dispatchGroup.enter() metadataQueue.async { [weak self] in - self?.networkService.send(rpc: RPC.managerKey(forAddress: forWalletAddress), withBaseURL: url) { (result) in + self?.networkService.send(rpc: RPC.managerKey(forAddress: forWalletAddress), withNodeURLs: config.nodeURLs) { (result) in switch result { case .success(let value): managerKey = value @@ -222,7 +222,7 @@ public class TezosNodeClient { // Get counter dispatchGroup.enter() metadataQueue.async { [weak self] in - self?.networkService.send(rpc: RPC.counter(forAddress: forWalletAddress), withBaseURL: url) { (result) in + self?.networkService.send(rpc: RPC.counter(forAddress: forWalletAddress), withNodeURLs: config.nodeURLs) { (result) in switch result { case .success(let value): counter = Int(value) ?? 0 @@ -239,7 +239,7 @@ public class TezosNodeClient { // Get blockchain head dispatchGroup.enter() metadataQueue.async { [weak self] in - self?.networkService.send(rpc: RPC.blockchainHeadMinus3(), withBaseURL: url) { (result) in + self?.networkService.send(rpc: RPC.blockchainHeadMinus3(), withNodeURLs: config.nodeURLs) { (result) in switch result { case .success(let value): blockchainHead = value @@ -269,7 +269,7 @@ public class TezosNodeClient { - parameter completion: A callback with a `Result` object, with either a `[String: Any]` or an `Error` */ public func getContractStorage(contractAddress: String, completion: @escaping ((Result<[String: Any], KukaiError>) -> Void)) { - self.networkService.send(rpc: RPC.contractStorage(contractAddress: contractAddress), withBaseURL: config.primaryNodeURL) { result in + self.networkService.send(rpc: RPC.contractStorage(contractAddress: contractAddress), withNodeURLs: config.nodeURLs) { result in switch result { case .success(let d): if let json = try? JSONSerialization.jsonObject(with: d) as? [String: Any] { @@ -290,7 +290,7 @@ public class TezosNodeClient { - parameter completion: A callback with a `Result` object, with either a `[String: Any]` or an `Error` */ public func getBigMap(id: String, completion: @escaping ((Result<[String: Any], KukaiError>) -> Void)) { - self.networkService.send(rpc: RPC.bigMap(id: id), withBaseURL: config.primaryNodeURL) { result in + self.networkService.send(rpc: RPC.bigMap(id: id), withNodeURLs: config.nodeURLs) { result in switch result { case .success(let d): if let json = try? JSONSerialization.jsonObject(with: d) as? [String: Any] { @@ -316,13 +316,13 @@ public class TezosNodeClient { dispatchGroup.enter() dexterQueriesQueue.async { [weak self] in - guard let url = self?.config.primaryNodeURL else { - Logger.kukaiCoreSwift.info("Invalid server url: \(self?.config.primaryNodeURL.absoluteString ?? "nil")") + guard let config = self?.config else { + Logger.kukaiCoreSwift.info("Invalid nodeURLs") completion(false, KukaiError.internalApplicationError(error: NetworkService.NetworkError.invalidURL)) return } - self?.networkService.send(rpc: RPC.networkVersion(), withBaseURL: url) { (result) in + self?.networkService.send(rpc: RPC.networkVersion(), withNodeURLs: config.nodeURLs) { (result) in switch result { case .success(let value): self?.networkVersion = value @@ -337,13 +337,13 @@ public class TezosNodeClient { dispatchGroup.enter() dexterQueriesQueue.async { [weak self] in - guard let url = self?.config.primaryNodeURL else { - Logger.kukaiCoreSwift.info("Invalid server url: \(self?.config.primaryNodeURL.absoluteString ?? "nil")") + guard let config = self?.config else { + Logger.kukaiCoreSwift.info("Invalid nodeURLs") completion(false, KukaiError.internalApplicationError(error: NetworkService.NetworkError.invalidURL)) return } - self?.networkService.send(rpc: RPC.networkConstants(), withBaseURL: url) { (result) in + self?.networkService.send(rpc: RPC.networkConstants(), withNodeURLs: config.nodeURLs) { (result) in switch result { case .success(let value): self?.networkConstants = value diff --git a/Sources/KukaiCoreSwift/Clients/TzKTClient.swift b/Sources/KukaiCoreSwift/Clients/TzKTClient.swift index 26d4d638..93481b78 100644 --- a/Sources/KukaiCoreSwift/Clients/TzKTClient.swift +++ b/Sources/KukaiCoreSwift/Clients/TzKTClient.swift @@ -9,7 +9,6 @@ import Foundation import SignalRClient import Combine -import Kingfisher import os.log @@ -298,7 +297,7 @@ public class TzKTClient { alias = config.name avatarURL = TzKTClient.avatarURL(forToken: config.address) fee = config.fee - indexOfCyclePaymentIsFor = (cycleIndexPaymentReceived - (config.payoutDelay - 1)) + indexOfCyclePaymentIsFor = (cycleIndexPaymentReceived == 0) ? 0 : (cycleIndexPaymentReceived - (config.payoutDelay - 1)) } // If the tx came from a known payout address, match it to the baker address and grab the config @@ -308,7 +307,7 @@ public class TzKTClient { alias = config.name avatarURL = TzKTClient.avatarURL(forToken: config.address) fee = config.fee - indexOfCyclePaymentIsFor = (cycleIndexPaymentReceived - (config.payoutDelay - 1)) + indexOfCyclePaymentIsFor = (cycleIndexPaymentReceived == 0) ? 0 : (cycleIndexPaymentReceived - (config.payoutDelay - 1)) } } } @@ -355,6 +354,21 @@ public class TzKTClient { return } } + // Inactive baker, display next reward as zero + else if previousRewardIndex == 0 { + let futureCycle = currentCycles.first + let futureReward = RewardDetails(bakerAlias: pReward?.bakerAlias, + bakerLogo: pReward?.bakerLogo, + paymentAddress: pReward?.paymentAddress ?? configToUse.address, + amount: .zero(), + cycle: futureCycle?.index ?? 0, + fee: 0, + date: futureCycle?.endDate ?? Date(), + meetsMinDelegation: pReward?.meetsMinDelegation ?? true) + DispatchQueue.main.async { completion(Result.success(AggregateRewardInformation(previousReward: pReward, estimatedPreviousReward: nil, estimatedNextReward: futureReward))) } + return + } + let lastCompleteCycle = currentCycles[TzKTClient.numberOfFutureCyclesReturned + 1] estimatedPreviousReward = self?.rewardDetail(fromConfig: configToUse, rewards: currentDelegatorRewards, cycles: currentCycles, selectedIndex: previousRewardIndex, dateForDisplay: lastCompleteCycle.endDate ?? Date()) @@ -570,8 +584,8 @@ public class TzKTClient { } if let last = cycles.last, last.firstLevel > level { - // Level is in the past, return last cycle we have - return last + // Level is in the past, return nil so we don't display invalid data + return nil } else if let first = cycles.first, first.lastLevel < level { // Delegation level is in the future, return nil @@ -628,7 +642,7 @@ public class TzKTClient { isListening = true var url = config.tzktURL - url.appendPathComponent("v1/events") + url.appendPathComponent("v1/ws") if withDebugging { signalrConnection = HubConnectionBuilder(url: url).withLogging(minLogLevel: .debug).build() @@ -655,7 +669,6 @@ public class TzKTClient { Logger.tzkt.error("Failed to parse incoming websocket data: \(error)") self?.signalrConnection?.stop() self?.isListening = false - //completion(false, error, KukaiError.internalApplicationError(error: error)) } }) signalrConnection?.delegate = self @@ -726,9 +739,14 @@ public class TzKTClient { - parameter forAddress: The tz address to search for - parameter completion: The completion block called with a `Result` containing an object or an error */ - public func getAccount(forAddress: String, completion: @escaping ((Result) -> Void)) { - var url = config.tzktURL - url.appendPathComponent("v1/accounts/\(forAddress)") + public func getAccount(forAddress: String, fromURL: URL? = nil, completion: @escaping ((Result) -> Void)) { + var url = fromURL == nil ? config.tzktURL : fromURL + url?.appendPathComponent("v1/accounts/\(forAddress)") + + guard let url = url else { + completion(Result.failure(KukaiError.unknown())) + return + } networkService.request(url: url, isPOST: false, withBody: nil, forReturnType: TzKTAccount.self) { (result) in completion(result) @@ -763,13 +781,13 @@ public class TzKTClient { var tzktAccount = TzKTAccount(balance: 0, type: "user", address: "", publicKey: "", revealed: false, delegate: TzKTAccountDelegate(alias: nil, address: "", active: false), delegationLevel: 0, activeTokensCount: 0, tokenBalancesCount: 0) var tokenBalances: [TzKTBalance] = [] - var liquidityTokens: [DipDupPositionData] = [] + //var liquidityTokens: [DipDupPositionData] = [] var errorFound: KukaiError? = nil var groupedData: (tokens: [Token], nftGroups: [Token], recentNFTs: [NFT]) = (tokens: [], nftGroups: [], recentNFTs: []) dispatchGroup.enter() - dispatchGroup.enter() + //dispatchGroup.enter() // Get XTZ balance from TzKT Account self.getAccount(forAddress: address) { result in @@ -783,7 +801,8 @@ public class TzKTClient { dispatchGroup.leave() } - + // TODO: DeFi functionality currently disabled + /* // Get Liquidity Tokens from DipDup self.dipDupClient.getLiquidityFor(address: address) { result in switch result { @@ -795,6 +814,7 @@ public class TzKTClient { } dispatchGroup.leave() } + */ // Cycle through the number of token balance requests needed to be performed (likely just 1) @@ -821,8 +841,8 @@ public class TzKTClient { completion(Result.failure(err)) } else { - groupedData = self?.groupBalances(tokenBalances, filteringOutLiquidityTokens: liquidityTokens) ?? (tokens: [], nftGroups: [], recentNFTs: []) - let account = Account(walletAddress: address, xtzBalance: tzktAccount.xtzBalance, tokens: groupedData.tokens, nfts: groupedData.nftGroups, recentNFTs: groupedData.recentNFTs, liquidityTokens: liquidityTokens, delegate: tzktAccount.delegate, delegationLevel: tzktAccount.delegationLevel) + groupedData = self?.groupBalances(tokenBalances, filteringOutLiquidityTokens: []) ?? (tokens: [], nftGroups: [], recentNFTs: []) + let account = Account(walletAddress: address, xtzBalance: tzktAccount.xtzBalance, tokens: groupedData.tokens, nfts: groupedData.nftGroups, recentNFTs: groupedData.recentNFTs, liquidityTokens: [], delegate: tzktAccount.delegate, delegationLevel: tzktAccount.delegationLevel) completion(Result.success(account)) } @@ -839,6 +859,8 @@ public class TzKTClient { for balance in balances { + // TODO: temporarily remove, as we currently are not supporting differentiating Liquidity tokens. Will be re added later + /* // Check if balance is a liquidityToken and ignore it // Liquidity baking is a standalone contract address. Hardcoding address for now, revisit how to query if it ever migrates to another token if balance.token.contract.address == "KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo" { @@ -849,7 +871,7 @@ public class TzKTClient { if liquidityTokens.contains(where: { $0.exchange.address == balance.token.contract.address }) { continue } - + */ // If its an NFT, hold onto for later if balance.isNFT() && balance.token.malformedMetadata == false { @@ -1011,8 +1033,9 @@ public class TzKTClient { } } } - self.tempTokenTransfers.remove(atOffsets: IndexSet(transfersToRemove)) - self.tempTransactions.remove(atOffsets: IndexSet(transactionsToRemove)) + + let _ = self.tempTokenTransfers.remove(elementsAtIndices: transfersToRemove) + let _ = self.tempTransactions.remove(elementsAtIndices: transactionsToRemove) for leftOverTransfer in self.tempTokenTransfers { self.tempTransactions.append( TzKTTransaction(from: leftOverTransfer) ) @@ -1076,7 +1099,7 @@ public class TzKTClient { } } - tempTrans.remove(atOffsets: IndexSet(indexesToRemove)) + let _ = tempTrans.remove(elementsAtIndices: indexesToRemove) if let group = TzKTTransactionGroup(withTransactions: tempTrans, currentWalletAddress: currentWalletAddress) { tempGroups.append(group) } @@ -1096,14 +1119,17 @@ extension TzKTClient: HubConnectionDelegate { if let error = error { Logger.tzkt.error("Subscribe to account changes failed: \(error)") self?.signalrConnection?.stop() + self?.isListening = false } else { Logger.tzkt.info("Subscribe to account changes succeeded, waiting for objects") + self?.isListening = true } } } public func connectionDidClose(error: Error?) { Logger.tzkt.error("SignalR connection closed: \(error)") + isListening = false if newAddressesToWatch.count > 0 { self.listenForAccountChanges(addresses: newAddressesToWatch) @@ -1113,5 +1139,6 @@ extension TzKTClient: HubConnectionDelegate { public func connectionDidFailToOpen(error: Error) { Logger.tzkt.error("Failed to open SignalR connection to listen for changes: \(error)") + isListening = false } } diff --git a/Sources/KukaiCoreSwift/Extensions/Array+extensions.swift b/Sources/KukaiCoreSwift/Extensions/Array+extensions.swift index 28e5eb99..00d5bac7 100644 --- a/Sources/KukaiCoreSwift/Extensions/Array+extensions.swift +++ b/Sources/KukaiCoreSwift/Extensions/Array+extensions.swift @@ -19,4 +19,37 @@ extension Array { var slice: ArraySlice { self[self.startIndex ..< self.endIndex] } + + mutating func remove(elementsAtIndices indicesToRemove: [Int]) -> [Element] { + guard !indicesToRemove.isEmpty else { + return [] + } + + // Copy the removed elements in the specified order. + let removedElements = indicesToRemove.map { self[$0] } + + // Sort the indices to remove. + let indicesToRemove = indicesToRemove.sorted() + + // Shift the elements we want to keep to the left. + var destIndex = indicesToRemove.first! + var srcIndex = destIndex + 1 + func shiftLeft(untilIndex index: Int) { + while srcIndex < index { + self[destIndex] = self[srcIndex] + destIndex += 1 + srcIndex += 1 + } + srcIndex += 1 + } + for removeIndex in indicesToRemove[1...] { + shiftLeft(untilIndex: removeIndex) + } + shiftLeft(untilIndex: self.endIndex) + + // Remove the extra elements from the end of the array. + self.removeLast(indicesToRemove.count) + + return removedElements + } } diff --git a/Sources/KukaiCoreSwift/Extensions/String+extensions.swift b/Sources/KukaiCoreSwift/Extensions/String+extensions.swift index 692b3357..30a52012 100644 --- a/Sources/KukaiCoreSwift/Extensions/String+extensions.swift +++ b/Sources/KukaiCoreSwift/Extensions/String+extensions.swift @@ -34,4 +34,14 @@ public extension String { return nil } } + + /// Pad the left side of a string with characters + func padLeft(toLength: Int, withPad character: Character) -> String { + let stringLength = self.count + if stringLength < toLength { + return String(repeatElement(character, count: toLength - stringLength)) + self + } else { + return String(self.suffix(toLength)) + } + } } diff --git a/Sources/KukaiCoreSwift/Extensions/Thread+extensions.swift b/Sources/KukaiCoreSwift/Extensions/Thread+extensions.swift index fcdec307..c821a31f 100644 --- a/Sources/KukaiCoreSwift/Extensions/Thread+extensions.swift +++ b/Sources/KukaiCoreSwift/Extensions/Thread+extensions.swift @@ -11,15 +11,6 @@ public extension Thread { /// Check if the given thread is being run from inside an XCTest bundle var isRunningXCTest: Bool { - for key in self.threadDictionary.allKeys { - guard let keyAsString = key as? String else { - continue - } - - if keyAsString.split(separator: ".").contains("xctest") { - return true - } - } - return false + return ProcessInfo.processInfo.environment["XCTestConfigurationFilePath"] != nil } } diff --git a/Sources/KukaiCoreSwift/Extensions/URL+extensions.swift b/Sources/KukaiCoreSwift/Extensions/URL+extensions.swift index 9d1c87d9..e6962de8 100644 --- a/Sources/KukaiCoreSwift/Extensions/URL+extensions.swift +++ b/Sources/KukaiCoreSwift/Extensions/URL+extensions.swift @@ -10,7 +10,7 @@ import Foundation import OSLog /// Extensions to make adding query items easier -extension URL { +public extension URL { /// Helper to append a String as a query param to a URL mutating func appendQueryItem(name: String, value: String?) { diff --git a/Sources/KukaiCoreSwift/Factories/OperationFactory.swift b/Sources/KukaiCoreSwift/Factories/OperationFactory.swift index 5b554285..66dc313e 100644 --- a/Sources/KukaiCoreSwift/Factories/OperationFactory.swift +++ b/Sources/KukaiCoreSwift/Factories/OperationFactory.swift @@ -119,6 +119,7 @@ public class OperationFactory { } } + /* /** Create the operations necessary to perform an exchange of a given FA token for XTZ, using dex contracts - parameter withDex: `DipDupExchange` instance providing information about the exchange @@ -153,7 +154,7 @@ public class OperationFactory { return operations } - + */ // MARK: - Allowance (approve, update_operators) @@ -185,10 +186,10 @@ public class OperationFactory { - parameter wallet: The wallet signing the operation - returns: An `OperationTransaction` which will invoke a smart contract call */ - public static func updateOperatorsOperation(tokenAddress: String, spenderAddress: String, allowance: TokenAmount, walletAddress: String) -> Operation { + public static func updateOperatorsOperation(tokenAddress: String, tokenId: String, spenderAddress: String, walletAddress: String) -> Operation { let params: [String: Any] = [ "entrypoint": OperationTransaction.StandardEntrypoint.updateOperators.rawValue, - "value": [["prim": "Left","args": [["prim": "Pair","args": [["string": walletAddress] as [String: Any], ["prim": "Pair","args": [["string": spenderAddress], ["int": allowance.rpcRepresentation]]]]] as [String : Any]]]] as [[String: Any]] + "value": [["prim": "Left","args": [["prim": "Pair","args": [["string": walletAddress] as [String: Any], ["prim": "Pair","args": [["string": spenderAddress], ["int": tokenId]]]]] as [String : Any]]]] as [[String: Any]] ] return OperationTransaction(amount: TokenAmount.zero(), source: walletAddress, destination: tokenAddress, parameters: params) @@ -204,14 +205,14 @@ public class OperationFactory { - parameter wallet: The wallet signing the operation - returns: An `OperationTransaction` which will invoke a smart contract call */ - public static func allowanceOperation(standard: DipDupTokenStandard, tokenAddress: String, spenderAddress: String, allowance: TokenAmount, walletAddress: String) -> Operation { + public static func allowanceOperation(standard: DipDupTokenStandard, tokenAddress: String, tokenId: String?, spenderAddress: String, allowance: TokenAmount, walletAddress: String) -> Operation { switch standard { case .fa12: return approveOperation(tokenAddress: tokenAddress, spenderAddress: spenderAddress, allowance: allowance, walletAddress: walletAddress) case .fa2: - return updateOperatorsOperation(tokenAddress: tokenAddress, spenderAddress: spenderAddress, allowance: allowance, walletAddress: walletAddress) + return updateOperatorsOperation(tokenAddress: tokenAddress, tokenId: tokenId ?? "0", spenderAddress: spenderAddress, walletAddress: walletAddress) case .unknown: return approveOperation(tokenAddress: tokenAddress, spenderAddress: spenderAddress, allowance: allowance, walletAddress: walletAddress) @@ -222,6 +223,7 @@ public class OperationFactory { // MARK: - Dex functions + /* /** Create the operations necessary to add liquidity to a dex contract. Use DexCalculationService to figure out the numbers required - parameter withDex: `DipDupExchange` instance providing information about the exchange @@ -258,6 +260,7 @@ public class OperationFactory { return operations } + */ /** Create the operations necessary to remove liquidity from a dex contract, also withdraw pending rewards if applicable. Use DexCalculationService to figure out the numbers required @@ -377,11 +380,197 @@ public class OperationFactory { /// Internal Struct to encapsulate helpers methods needed to extract critical information from an array of operations, needed for processing decisions like "do i display a send token screen, or a send NFt screen", fetching total XTZ sent in 1 action etc public struct Extractor { + /** + Filter reveal operation (if present), and check if what remains is a single OperationTransaction + Useful for other functions, such as checking if the list of operations is a single XTZ or token transfer + */ + public static func isSingleTransaction(operations: [Operation]) -> OperationTransaction? { + let filteredOperations = filterReveal(operations: operations) + if filteredOperations.count == 1, let op = filteredOperations.first as? OperationTransaction { + return op + } + + return nil + } + + /** + Filter and verify only 1 transaction exists thats sending XTZ. If so return this operation, otherwise return false + */ + public static func isTezTransfer(operations: [Operation]) -> OperationTransaction? { + if let op = isSingleTransaction(operations: operations), op.amount != "0", op.parameters == nil { + return op + } + + return nil + } + + /** + Filter and verify only 1 transaction exists thats setting a baker. If so return this operation, otherwise return false + */ + public static func isDelegate(operations: [Operation]) -> OperationDelegation? { + let filteredOperations = filterReveal(operations: operations) + if filteredOperations.count == 1, let op = filteredOperations.first as? OperationDelegation { + return op + } + + return nil + } + + /** + Filter and verify only 1 transaction exists thats sending a token. If so return this operation, otherwise return false + */ + public static func isFaTokenTransfer(operations: [Operation]) -> (operation: OperationTransaction, tokenContract: String, rpcAmount: String, tokenId: Decimal?, destination: String)? { + if let op = isSingleTransaction(operations: operations), let details = faTokenDetailsFromTransfer(transaction: op) { + return (operation: op, tokenContract: details.tokenContract, rpcAmount: details.rpcAmount, tokenId: details.tokenId, destination: details.destination) + } + + return nil + } + + /** + Filter and verify only 1 transaction exists its not a transfer operation. If so return this operation, otherwise return false + */ + public static func isSingleContractCall(operations: [Operation]) -> (operation: OperationTransaction, entrypoint: String, address: String)? { + if let op = isSingleTransaction(operations: operations), let details = isNonTransferContractCall(operation: op) { + return details + } + + return nil + } + + /** + Extract details from a transfer payload in order to present to the user what it is they are trying to send + */ + public static func faTokenDetailsFromTransfer(transaction: OperationTransaction) -> (tokenContract: String, rpcAmount: String, tokenId: Decimal?, destination: String)? { + if let params = transaction.parameters, let amountAndId = OperationFactory.Extractor.tokenIdAndAmountFromTransferMichelson(michelson: params["value"] ?? [Any]()) { + let tokenContractAddress = transaction.destination + return (tokenContract: tokenContractAddress, rpcAmount: amountAndId.rpcAmount, tokenId: amountAndId.tokenId, destination: amountAndId.destination) + } + + return nil + } + + /** + Extract rpc amount (without decimal info) a tokenId, and the destination from a michelson `approve` value + */ + public static func tokenIdAndAmountFromApproveMichelson(michelson: Any) -> (rpcAmount: String, tokenId: Decimal?, destination: String)? { + if let michelsonDict = michelson as? [String: Any] { + let rpcAmountString = michelsonDict.michelsonArgsArray()?.michelsonInt(atIndex: 1) + let rpcDestinationString = michelsonDict.michelsonArgsArray()?.michelsonString(atIndex: 0) ?? "" + + if let str = rpcAmountString { + return (rpcAmount: str, tokenId: nil, destination: rpcDestinationString) + } else { + return nil + } + } else { + return nil + } + } + + /** + Extract a tokenId, and the destination from a michelson `update_operators` value + */ + public static func tokenIdFromUpdateOperatorsMichelson(michelson: Any) -> (tokenId: Decimal?, destination: String)? { + if let michelsonArray = michelson as? [Any] { + let argsArray1 = michelsonArray.michelsonPair(atIndex: 0)?.michelsonArgsArray()?.michelsonPair(atIndex: 0)?.michelsonArgsArray()?.michelsonPair(atIndex: 1)?.michelsonArgsArray() + let rpcDestination = argsArray1?.michelsonString(atIndex: 0) + let rpcTokenIdString = argsArray1?.michelsonInt(atIndex: 1) + + if let str = rpcTokenIdString, let dest = rpcDestination { + return (tokenId: Decimal(string: str), destination: dest) + } else { + return nil + } + } else { + return nil + } + } + + /** + Extract rpc amount (without decimal info) michelson `execute` value for a 3route call + */ + public static func tokenAmountFromExecuteMichelson(michelson: Any, contract: String) -> Decimal? { + + if contract == "KT1R7WEtNNim3YgkxPt8wPMczjH3eyhbJMtz", let michelsonDict = michelson as? [String: Any] { + // v3 + + let routeArray = (michelsonDict.michelsonArgsArray()?.michelsonPair(atIndex: 1)?.michelsonArgsArray()?.michelsonPair(atIndex: 1)?.michelsonArgsArray()?.michelsonPair(atIndex: 1)?.michelsonArgsArray()?.michelsonPair(atIndex: 1)?.michelsonArgsUnknownArray()?.first as? [[String: Any]]) + + var total: Decimal = 0 + for michelsonDictRoute in routeArray ?? [] { + let value = michelsonDictRoute.michelsonArgsArray()?.michelsonPair(atIndex: 1)?.michelsonArgsArray()?.michelsonPair(atIndex: 0)?.michelsonArgsArray()?.michelsonInt(atIndex: 0) + total += Decimal(string: value ?? "0") ?? 0 + } + + return total + + } else if contract == "KT1V5XKmeypanMS9pR65REpqmVejWBZURuuT", let michelsonDict = michelson as? [String: Any] { + // v4 + + let routeArray = (michelsonDict.michelsonArgsArray()?.michelsonPair(atIndex: 1)?.michelsonArgsArray()?.michelsonPair(atIndex: 1)?.michelsonArgsArray()?.michelsonPair(atIndex: 1)?.michelsonArgsArray()?.michelsonPair(atIndex: 1)?.michelsonArgsUnknownArray()?.first as? [[String: Any]]) + + var total: Decimal = 0 + for michelsonDictRoute in routeArray ?? [] { + let value = michelsonDictRoute.michelsonArgsArray()?.michelsonPair(atIndex: 1)?.michelsonArgsArray()?.michelsonPair(atIndex: 1)?.michelsonArgsArray()?.michelsonPair(atIndex: 1)?.michelsonArgsArray()?.michelsonInt(atIndex: 0) + total += Decimal(string: value ?? "0") ?? 0 + } + + return total + + } else { + return nil + } + } + + /** + Extract rpc amount (without decimal info) michelson `deposit` value for a crunchy stake call + */ + public static func tokenAmountFromDepositMichelson(michelson: Any) -> Decimal? { + if let michelsonDict = michelson as? [String: Any] { + let tokenAmount = michelsonDict.michelsonArgsArray()?.michelsonInt(atIndex: 1) + + return Decimal(string: tokenAmount ?? "0") ?? 0 + + } else { + return nil + } + } + + /** + Extract rpc amount (without decimal info) michelson `offer` value for a OBJKT offer call + */ + public static func tokenAmountFromOfferMichelson(michelson: Any) -> Decimal? { + if let michelsonDict = michelson as? [String: Any] { + let tokenAmount = michelsonDict.michelsonArgsArray()?.michelsonPair(atIndex: 1)?.michelsonArgsArray()?.michelsonPair(atIndex: 1)?.michelsonArgsArray()?.michelsonInt(atIndex: 0) + + return Decimal(string: tokenAmount ?? "0") ?? 0 + + } else { + return nil + } + } + + /** + Extract rpc amount (without decimal info) michelson `offer` value for a OBJKT offer call + */ + public static func tokenAmountFromBidMichelson(michelson: Any) -> Decimal? { + if let michelsonDict = michelson as? [String: Any] { + let tokenAmount = michelsonDict.michelsonArgsArray()?.michelsonPair(atIndex: 1)?.michelsonArgsArray()?.michelsonInt(atIndex: 0) + + return Decimal(string: tokenAmount ?? "0") ?? 0 + + } else { + return nil + } + } + /** Extract rpc amount (without decimal info) a tokenId, and the destination from a michelson FA1.2 / FA2 transfer payload */ - public static func tokenIdAndAmountFromSendMichelson(michelson: Any) -> (rpcAmount: String, tokenId: Decimal?, destination: String)? { + public static func tokenIdAndAmountFromTransferMichelson(michelson: Any) -> (rpcAmount: String, tokenId: Decimal?, destination: String)? { if let michelsonDict = michelson as? [String: Any] { + // FA1.2 let rpcAmountString = michelsonDict.michelsonArgsArray()?.michelsonPair(atIndex: 1)?.michelsonArgsArray()?.michelsonInt(atIndex: 1) let rpcDestinationString = michelsonDict.michelsonArgsArray()?.michelsonPair(atIndex: 1)?.michelsonArgsArray()?.michelsonString(atIndex: 0) ?? "" @@ -393,9 +582,18 @@ public class OperationFactory { } } else if let michelsonArray = michelson as? [[String: Any]] { + // FA2 + let outerContainerArray = michelsonArray[0].michelsonArgsUnknownArray()?.michelsonArray(atIndex: 1) + + // For now, we only support sending 1 item per transaction. The FA2 standard allows for multiple items to be passed in via an array + // If thats the case we simply return nil, to mark it as an unknwon type until we can get a better handle on extractions + guard outerContainerArray?.count == 1 else { + return nil + } + + let argsArray1 = outerContainerArray?.michelsonPair(atIndex: 0)?.michelsonArgsArray() - let argsArray1 = michelsonArray[0].michelsonArgsUnknownArray()?.michelsonArray(atIndex: 1)?.michelsonPair(atIndex: 0)?.michelsonArgsArray() let rpcDestination = argsArray1?.michelsonString(atIndex: 0) let argsArray2 = argsArray1?.michelsonPair(atIndex: 1)?.michelsonArgsArray() @@ -414,93 +612,235 @@ public class OperationFactory { } /** - Extract details from a payload in order to present to the user what it is they are trying to send + Extract rpc amount (without decimal info) a tokenId, and the destination from a michelson + Supports: + - FA1.2 transfer + - FA2 transfer + - 3Route + - Approve operation + - update_operator operation */ - public static func faTokenDetailsFrom(transaction: OperationTransaction) -> (tokenContract: String, rpcAmount: String, tokenId: Decimal?, destination: String)? { - if let params = transaction.parameters, let amountAndId = OperationFactory.Extractor.tokenIdAndAmountFromSendMichelson(michelson: params["value"] ?? [Any]()) { - let tokenContractAddress = transaction.destination - return (tokenContract: tokenContractAddress, rpcAmount: amountAndId.rpcAmount, tokenId: amountAndId.tokenId, destination: amountAndId.destination) + public static func tokenIdAndAmountFromMichelson(michelson: Any, contract: String) -> (rpcAmount: String, tokenId: Decimal?, destination: String?)? { + if let michelsonDict = michelson as? [String: Any], let entrypoint = michelsonDict["entrypoint"] as? String { + switch entrypoint { + case OperationTransaction.StandardEntrypoint.approve.rawValue: + if let approveResponse = tokenIdAndAmountFromApproveMichelson(michelson: michelsonDict["value"] ?? [:]) { + return (rpcAmount: approveResponse.rpcAmount, tokenId: approveResponse.tokenId, destination: approveResponse.destination) + } else { + return nil + } + + case OperationTransaction.StandardEntrypoint.updateOperators.rawValue: + if let updateResponse = tokenIdFromUpdateOperatorsMichelson(michelson: michelsonDict["value"] ?? [:]) { + return (rpcAmount: "0", tokenId: updateResponse.tokenId, destination: updateResponse.destination) + } else { + return nil + } + + case OperationTransaction.StandardEntrypoint.transfer.rawValue: + return tokenIdAndAmountFromTransferMichelson(michelson: michelsonDict["value"] ?? [:]) + + case OperationTransaction.StandardEntrypoint.execute.rawValue: // 3route + if let response = tokenAmountFromExecuteMichelson(michelson: michelsonDict["value"] ?? [:], contract: contract) { + return (rpcAmount: response.description, tokenId: nil, destination: nil) // Can extract amount, but nothing else + + } else { + return nil + } + + case OperationTransaction.StandardEntrypoint.deposit.rawValue: // crunchy - stake + if let response = tokenAmountFromDepositMichelson(michelson: michelsonDict["value"] ?? [:]) { + return (rpcAmount: response.description, tokenId: nil, destination: nil) // Can extract amount, but nothing else + + } else { + return nil + } + + case OperationTransaction.StandardEntrypoint.offer.rawValue: // OBJKT - make offer + if let response = tokenAmountFromOfferMichelson(michelson: michelsonDict["value"] ?? [:]) { + return (rpcAmount: response.description, tokenId: nil, destination: nil) // Can extract amount, but nothing else + + } else { + return nil + } + + case OperationTransaction.StandardEntrypoint.bid.rawValue: // OBJKT - bid on auction + if let response = tokenAmountFromBidMichelson(michelson: michelsonDict["value"] ?? [:]) { + return (rpcAmount: response.description, tokenId: nil, destination: nil) // Can extract amount, but nothing else + + } else { + return nil + } + + default: + return nil + } } return nil } /** - Helper to call `faTokenDetailsFrom(transaction: OperationTransaction)` on the first `OperationTransaction` in an array of operations. Allows to more easily parse an array of operations that may include `approval`'s or `update_operator` calls + Run through list of operations and extract the first valid `faTokenDetailsFrom(transaction: ...)` + In the case of hitting an `update_operators`, will check for the next transaction to see if it contains the amount + Useful for displaying the main token being swapped in a dex aggregator call */ - public static func faTokenDetailsFrom(operations: [Operation]) -> (tokenContract: String, rpcAmount: String, tokenId: Decimal?, destination: String)? { - if let op = operations.first(where: { $0 is OperationTransaction }) as? OperationTransaction { - return OperationFactory.Extractor.faTokenDetailsFrom(transaction: op) + public static func firstNonZeroTokenTransferAmount(operations: [Operation]) -> (tokenContract: String, rpcAmount: String, tokenId: Decimal?, destination: String)? { + + var lastTokenIdAndAmountResults: (rpcAmount: String, tokenId: Decimal?, destination: String?)? = nil + var lastTokenAddress: String? = nil + + for op in operations { + if let opTrans = op as? OperationTransaction, let details = tokenIdAndAmountFromMichelson(michelson: opTrans.parameters ?? [:], contract: opTrans.destination), let entrypoint = (opTrans.parameters?["entrypoint"] as? String) { + + if entrypoint == OperationTransaction.StandardEntrypoint.approve.rawValue || entrypoint == OperationTransaction.StandardEntrypoint.updateOperators.rawValue { + + // If its an `approve` oepration or an `update_operators` hold onto the details for the next run + lastTokenIdAndAmountResults = details + lastTokenAddress = opTrans.destination + + } else if let lastDetails = lastTokenIdAndAmountResults, + let lastTokenAddress = lastTokenAddress, + (entrypoint != OperationTransaction.StandardEntrypoint.approve.rawValue && entrypoint != OperationTransaction.StandardEntrypoint.updateOperators.rawValue), + let knownOpDetails = tokenIdAndAmountFromMichelson(michelson: opTrans.parameters ?? [:], contract: opTrans.destination) { + + // If we have a previous set of details from an approve or update, check if we can extract something useful from this one to complete the info + return (tokenContract: lastTokenAddress, rpcAmount: knownOpDetails.rpcAmount, tokenId: lastDetails.tokenId, destination: lastDetails.destination ?? "") + + } else { + + // Return the non zero value we have + return (tokenContract: opTrans.destination, rpcAmount: details.rpcAmount, tokenId: details.tokenId, destination: details.destination ?? "") + } + } + } + + + if let lastDetails = lastTokenIdAndAmountResults, let lastTokenAddress = lastTokenAddress { + // If we have anything at all, return it, so that we can display something in the event of a single approve or whatever + return (tokenContract: lastTokenAddress, rpcAmount: lastDetails.rpcAmount, tokenId: lastDetails.tokenId, destination: lastDetails.destination ?? "") } return nil } /** - Return true if - - contains 1 operation with a non-zero amount, with no parameters + Reveal operation is often visually hidden from user, as its a mandatory step thats handled automatically */ - public static func isTezTransfer(operations: [Operation]) -> Bool { - if operations.count == 1, let op = operations.first as? OperationTransaction, op.amount != "0", op.parameters == nil { + public static func filterReveal(operations: [Operation]) -> [Operation] { + let ops = operations.filter { opToCheck in + if opToCheck.operationKind == .reveal { + return false + } + return true } - return false + return ops } - /// Easy way to extract the first non-`approval` or `update_operator` transaction - public static func firstTransferEntrypointOperation(operations: [Operation]) -> OperationTransaction? { - for op in operations { - if let opTrans = op as? OperationTransaction, let entrypoint = opTrans.parameters?["entrypoint"] as? String, - entrypoint == OperationTransaction.StandardEntrypoint.transfer.rawValue { - return opTrans + /** + Reveal, Approve and UpdateOperator operations can be appended to operation lists. When determining what the intent of the operation array is, it can be important to ignore these + */ + public static func filterRevealApporveUpdate(operations: [Operation]) -> [Operation] { + let ops = operations.filter { opToCheck in + let castAsTransaction = opToCheck as? OperationTransaction + let entrypointAsString = castAsTransaction?.parameters?["entrypoint"] as? String + + if opToCheck.operationKind == .reveal || + castAsTransaction == nil || + entrypointAsString == OperationTransaction.StandardEntrypoint.approve.rawValue || + entrypointAsString == OperationTransaction.StandardEntrypoint.updateOperators.rawValue { + return false } + + return true } - return nil + return ops } /** - Return the entrypoint and address of the first operation, that doesn't equal `approve`, `update_operator` or `transfer` + Check if the array is only of type OperationTransaction, optionally ignore reveal as its usually supressed from user + Useful in situations where you are displaying batch information but can only handle certain opertion types */ - public static func isContractCall(operations: [Operation]) -> (entrypoint: String, address: String)? { - if let contractOp = firstContractCallOperation(operations: operations), let entrypoint = contractOp.parameters?["entrypoint"] as? String { - return (entrypoint: entrypoint, address: contractOp.destination) + public static func containsAllOperationTransactions(operations: [Operation], ignoreReveal: Bool = true) -> Bool { + var result = false + + for op in operations { + if let _ = op as? OperationTransaction { + result = true + + } else if let _ = op as? OperationReveal { + result = ignoreReveal ? true : false + + } else { + result = false + } + + if !result { + return result + } } - return nil + return result } /** - Return the first operation where entrypoint doesn't equal `approve`, `update_operator` or `transfer` + Check if the array is contains at least 1 OperationUnknown + Useful in situations to display fallback UI for unknown cases */ - public static func firstContractCallOperation(operations: [Operation]) -> OperationTransaction? { + public static func containsAnUnknownOperation(operations: [Operation]) -> Bool { for op in operations { - if let opTrans = op as? OperationTransaction, let entrypoint = opTrans.parameters?["entrypoint"] as? String, - (entrypoint != OperationTransaction.StandardEntrypoint.approve.rawValue && - entrypoint != OperationTransaction.StandardEntrypoint.updateOperators.rawValue && - entrypoint != OperationTransaction.StandardEntrypoint.transfer.rawValue) { - return opTrans + if let _ = op as? OperationUnknown { + return true } } - return nil + return false } /** - Run through list of operations and extract .amount from any OperationTransaction + Run through list of operations and extract .amount from any OperationTransaction + balance from any OperationOrigination */ - public static func totalXTZAmountForContractCall(operations: [Operation]) -> XTZAmount { + public static func totalTezAmountSent(operations: [Operation]) -> XTZAmount { var amount = XTZAmount.zero() for op in operations { if let opTrans = op as? OperationTransaction { amount += (XTZAmount(fromRpcAmount: opTrans.amount) ?? .zero()) + + } else if let opOrig = op as? OperationOrigination { + amount += (XTZAmount(fromRpcAmount: opOrig.balance) ?? .zero()) } } return amount } + + /** + Check if the operation is a contract call, but ignore entrypoint trasnfer + Useful for situations where you want to display different info about contract calls such as claim or mint, compared to transferring a token + Return the entrypoint and contract address if so + */ + public static func isNonTransferContractCall(operation: Operation) -> (operation: OperationTransaction, entrypoint: String, address: String)? { + if let details = isContractCall(operation: operation), details.entrypoint != OperationTransaction.StandardEntrypoint.transfer.rawValue { + return details + } + + return nil + } + + /** + Check if the operation is a contract call, return the entrypoint and address if so, nil if not + */ + public static func isContractCall(operation: Operation) -> (operation: OperationTransaction, entrypoint: String, address: String)? { + if let opT = operation as? OperationTransaction, let entrypoint = opT.parameters?["entrypoint"] as? String { + return (operation: opT, entrypoint: entrypoint, address: opT.destination) + } + + return nil + } } diff --git a/Sources/KukaiCoreSwift/Models/BakingBad/DipDupExchange.swift b/Sources/KukaiCoreSwift/Models/BakingBad/DipDupExchange.swift index b1cee9bb..6de0dfff 100644 --- a/Sources/KukaiCoreSwift/Models/BakingBad/DipDupExchange.swift +++ b/Sources/KukaiCoreSwift/Models/BakingBad/DipDupExchange.swift @@ -19,6 +19,8 @@ public struct DipDupExchangesAndTokens: Codable { public let symbol: String public let address: String public let tokenId: Decimal + public let decimals: Int + public let thumbnailUri: String? public let exchanges: [DipDupExchange] /// Get the total XTZ pool amount from all the exchanges, useful for sorting diff --git a/Sources/KukaiCoreSwift/Models/BakingBad/DipDupToken.swift b/Sources/KukaiCoreSwift/Models/BakingBad/DipDupToken.swift index 7bbb1219..1cb456f7 100644 --- a/Sources/KukaiCoreSwift/Models/BakingBad/DipDupToken.swift +++ b/Sources/KukaiCoreSwift/Models/BakingBad/DipDupToken.swift @@ -25,6 +25,9 @@ public struct DipDupToken: Codable, Hashable, Equatable { /// Which standard the token follows public let standard: DipDupTokenStandard + /// Optional string to denote where to get the thumbnail image + public let thumbnailUri: String? + /// Conforming to `Hashable` to enable working with UITableViewDiffableDataSource public func hash(into hasher: inout Hasher) { hasher.combine(address) diff --git a/Sources/KukaiCoreSwift/Models/BakingBad/TzKTBaker.swift b/Sources/KukaiCoreSwift/Models/BakingBad/TzKTBaker.swift index 5f74869e..8da0c015 100644 --- a/Sources/KukaiCoreSwift/Models/BakingBad/TzKTBaker.swift +++ b/Sources/KukaiCoreSwift/Models/BakingBad/TzKTBaker.swift @@ -48,6 +48,7 @@ public struct TzKTBaker: Codable, Hashable { public let openForDelegation: Bool public let estimatedRoi: Decimal public let serviceHealth: TzKTBakerHealth + public let serviceType: String public let payoutTiming: TzKTBakerTiming public let payoutAccuracy: TzKTBakerAccuracy public let config: TzKTBakerConfig? @@ -70,12 +71,13 @@ public struct TzKTBaker: Codable, Hashable { self.openForDelegation = false self.estimatedRoi = 0 self.serviceHealth = .dead + self.serviceType = "unknown" self.payoutTiming = .no_data self.payoutAccuracy = .no_data self.config = nil } - public init(address: String, name: String?, logo: String?, balance: Decimal, stakingBalance: Decimal, stakingCapacity: Decimal, maxStakingBalance: Decimal, freeSpace: Decimal, fee: Double, minDelegation: Decimal, payoutDelay: Int, payoutPeriod: Int, openForDelegation: Bool, estimatedRoi: Decimal, serviceHealth: TzKTBakerHealth, payoutTiming: TzKTBakerTiming, payoutAccuracy: TzKTBakerAccuracy, config: TzKTBakerConfig?) { + public init(address: String, name: String?, logo: String?, balance: Decimal, stakingBalance: Decimal, stakingCapacity: Decimal, maxStakingBalance: Decimal, freeSpace: Decimal, fee: Double, minDelegation: Decimal, payoutDelay: Int, payoutPeriod: Int, openForDelegation: Bool, estimatedRoi: Decimal, serviceHealth: TzKTBakerHealth, serviceType: String, payoutTiming: TzKTBakerTiming, payoutAccuracy: TzKTBakerAccuracy, config: TzKTBakerConfig?) { self.address = address self.name = name @@ -92,6 +94,7 @@ public struct TzKTBaker: Codable, Hashable { self.openForDelegation = openForDelegation self.estimatedRoi = estimatedRoi self.serviceHealth = serviceHealth + self.serviceType = serviceType self.payoutTiming = payoutTiming self.payoutAccuracy = payoutAccuracy self.config = config @@ -107,7 +110,7 @@ public struct TzKTBaker: Codable, Hashable { let name = data[1] as? String let normalisedBalance = balance/1000000 let normalisedStakingBal = stakingBalance/1000000 - return TzKTBaker(address: address, name: name, logo: nil, balance: normalisedBalance, stakingBalance: normalisedStakingBal, stakingCapacity: normalisedStakingBal, maxStakingBalance: normalisedStakingBal, freeSpace: normalisedStakingBal, fee: 0.05, minDelegation: 0, payoutDelay: 6, payoutPeriod: 1, openForDelegation: true, estimatedRoi: 0.05, serviceHealth: .active, payoutTiming: .no_data, payoutAccuracy: .no_data, config: nil) + return TzKTBaker(address: address, name: name, logo: nil, balance: normalisedBalance, stakingBalance: normalisedStakingBal, stakingCapacity: normalisedStakingBal, maxStakingBalance: normalisedStakingBal, freeSpace: normalisedStakingBal, fee: 0.05, minDelegation: 0, payoutDelay: 6, payoutPeriod: 1, openForDelegation: true, estimatedRoi: 0.05, serviceHealth: .active, serviceType: "tezos_only", payoutTiming: .no_data, payoutAccuracy: .no_data, config: nil) } /// Convert con-chain data into a meaningful, readable object diff --git a/Sources/KukaiCoreSwift/Models/BakingBad/TzKTBalance.swift b/Sources/KukaiCoreSwift/Models/BakingBad/TzKTBalance.swift index 3336aebc..be662982 100644 --- a/Sources/KukaiCoreSwift/Models/BakingBad/TzKTBalance.swift +++ b/Sources/KukaiCoreSwift/Models/BakingBad/TzKTBalance.swift @@ -293,12 +293,12 @@ public struct TzKTBalanceMetadata: Codable { /// Helper to run the URI through the `MediaProxyService` to generate a useable URL for the thumbnail (if available) public var thumbnailURL: URL? { - return MediaProxyService.url(fromUriString: thumbnailUri, ofFormat: .icon, keepGif: true) + return MediaProxyService.url(fromUriString: thumbnailUri, ofFormat: MediaProxyService.Format.small.rawFormat(), keepGif: true) } /// Helper to run the URI through the `MediaProxyService` to generate a useable URL for the display image (if available) public var displayURL: URL? { - return MediaProxyService.url(fromUriString: displayUri, ofFormat: .small, keepGif: true) + return MediaProxyService.url(fromUriString: displayUri, ofFormat: MediaProxyService.Format.medium.rawFormat(), keepGif: true) } /// Attributes is a complex free-form object. In a lot of cases when NFT's are games / collectibles, it should be possible to convert most if not all the elements into more simple String: String key value pairs, which will be easier to manage in table / collection views diff --git a/Sources/KukaiCoreSwift/Models/BakingBad/TzKTTokenTransfer.swift b/Sources/KukaiCoreSwift/Models/BakingBad/TzKTTokenTransfer.swift index b23b7866..298b9cde 100644 --- a/Sources/KukaiCoreSwift/Models/BakingBad/TzKTTokenTransfer.swift +++ b/Sources/KukaiCoreSwift/Models/BakingBad/TzKTTokenTransfer.swift @@ -17,7 +17,8 @@ public struct TzKTTokenTransfer: Codable { public let to: TzKTAddress? public let from: TzKTAddress? public let amount: String - public let transactionId: Decimal + public let transactionId: Decimal? + public let originationId: Decimal? public let mintingTool: String? public func tokenAmount() -> TokenAmount { diff --git a/Sources/KukaiCoreSwift/Models/BakingBad/TzKTTransaction.swift b/Sources/KukaiCoreSwift/Models/BakingBad/TzKTTransaction.swift index f837f8f1..50576e1f 100644 --- a/Sources/KukaiCoreSwift/Models/BakingBad/TzKTTransaction.swift +++ b/Sources/KukaiCoreSwift/Models/BakingBad/TzKTTransaction.swift @@ -31,6 +31,7 @@ public struct TzKTTransaction: Codable, CustomStringConvertible, Hashable, Ident case origination case transaction case reveal + case batch case unknown } @@ -41,6 +42,7 @@ public struct TzKTTransaction: Codable, CustomStringConvertible, Hashable, Ident case reveal case exchange case contractCall + case batch case unknown } @@ -250,11 +252,11 @@ public struct TzKTTransaction: Codable, CustomStringConvertible, Hashable, Ident } /// Used for creating "Pending" transactions - public static func placeholder(withStatus status: TransactionStatus, opHash: String, type: TransactionType, counter: Decimal, fromWallet: WalletMetadata, destination: TzKTAddress, xtzAmount: TokenAmount, parameters: [String: String]?, primaryToken: Token?) -> TzKTTransaction { + public static func placeholder(withStatus status: TransactionStatus, id: Decimal, opHash: String, type: TransactionType, counter: Decimal, fromWallet: WalletMetadata, destination: TzKTAddress, xtzAmount: TokenAmount, parameters: [String: String]?, primaryToken: Token?) -> TzKTTransaction { let timestamp = TzKTTransaction.dateFormatter.string(from: Date()) let sender = TzKTAddress(alias: fromWallet.walletNickname ?? fromWallet.socialUsername ?? fromWallet.address, address: fromWallet.address) - var transaction = TzKTTransaction(type: .transaction, id: 0, level: 0, timestamp: timestamp, hash: opHash, counter: counter, initiater: nil, sender: sender, bakerFee: .zero(), storageFee: .zero(), allocationFee: .zero(), target: destination, prevDelegate: nil, newDelegate: nil, amount: xtzAmount, parameter: parameters, status: status, hasInternals: false, tokenTransfersCount: nil, errors: nil) + var transaction = TzKTTransaction(type: .transaction, id: id, level: id, timestamp: timestamp, hash: opHash, counter: counter, initiater: nil, sender: sender, bakerFee: .zero(), storageFee: .zero(), allocationFee: .zero(), target: destination, prevDelegate: nil, newDelegate: nil, amount: xtzAmount, parameter: parameters, status: status, hasInternals: false, tokenTransfersCount: nil, errors: nil) transaction.processAdditionalData(withCurrentWalletAddress: fromWallet.address) if let pToken = primaryToken { @@ -265,11 +267,11 @@ public struct TzKTTransaction: Codable, CustomStringConvertible, Hashable, Ident } /// Used for createing a "Pending" delegation transaction - public static func placeholder(withStatus status: TransactionStatus, opHash: String, type: TransactionType, counter: Decimal, fromWallet: WalletMetadata, newDelegate: TzKTAddress?) -> TzKTTransaction { + public static func placeholder(withStatus status: TransactionStatus, id: Decimal, opHash: String, type: TransactionType, counter: Decimal, fromWallet: WalletMetadata, newDelegate: TzKTAddress?) -> TzKTTransaction { let timestamp = TzKTTransaction.dateFormatter.string(from: Date()) let sender = TzKTAddress(alias: fromWallet.walletNickname ?? fromWallet.socialUsername ?? fromWallet.address, address: fromWallet.address) - var transaction = TzKTTransaction(type: .delegation, id: 0, level: 0, timestamp: timestamp, hash: opHash, counter: counter, initiater: nil, sender: sender, bakerFee: .zero(), storageFee: .zero(), allocationFee: .zero(), target: nil, prevDelegate: nil, newDelegate: newDelegate, amount: .zero(), parameter: nil, status: status, hasInternals: false, tokenTransfersCount: nil, errors: nil) + var transaction = TzKTTransaction(type: .delegation, id: id, level: id, timestamp: timestamp, hash: opHash, counter: counter, initiater: nil, sender: sender, bakerFee: .zero(), storageFee: .zero(), allocationFee: .zero(), target: nil, prevDelegate: nil, newDelegate: newDelegate, amount: .zero(), parameter: nil, status: status, hasInternals: false, tokenTransfersCount: nil, errors: nil) transaction.processAdditionalData(withCurrentWalletAddress: fromWallet.address) return transaction diff --git a/Sources/KukaiCoreSwift/Models/Config/TezosNodeClientConfig.swift b/Sources/KukaiCoreSwift/Models/Config/TezosNodeClientConfig.swift index 7892c13c..cb8cc144 100644 --- a/Sources/KukaiCoreSwift/Models/Config/TezosNodeClientConfig.swift +++ b/Sources/KukaiCoreSwift/Models/Config/TezosNodeClientConfig.swift @@ -32,11 +32,8 @@ public struct TezosNodeClientConfig { /// Preconfigured struct with all the URL's needed to work with Tezos mainnet public struct defaultMainnetURLs { - /// The default mainnet URL to use for `primaryNodeURL`, For more information on the free service, see: https://tezos.giganode.io/ - public static let primaryNodeURL = URL(string: "https://mainnet-tezos.giganode.io/")! - - /// The default mainnet URL to use for `parseNodeURL`, For more information on the free service, see: https://nautilus.cloud/ - public static let parseNodeURL = URL(string: "https://tezos-prod.cryptonomic-infra.tech:443/")! + /// The default mainnet URLs to use for estimating and injecting operations + public static let nodeURLs = [URL(string: "https://mainnet.smartpy.io")!, URL(string: "https://rpc.tzbeta.net")!] /// The default mainnet URL to use for `tzktURL`, For more information on this service, see: https://api.tzkt.io/ public static let tzktURL = URL(string: "https://api.tzkt.io/")! @@ -54,12 +51,8 @@ public struct TezosNodeClientConfig { /// Preconfigured struct with all the URL's needed to work with Tezos testnet public struct defaultTestnetURLs { - /// The default mainnet URL to use for `primaryNodeURL`, For more information on Ghostnet, see: https://teztnets.xyz/ghostnet-about - public static let primaryNodeURL = URL(string: "https://rpc.ghostnet.teztnets.xyz")! - - /// The default testnet URL to use for `parseNodeURL`, For more information on Ghostnet, see: https://teztnets.xyz/ghostnet-about - /// When using remote forging on mainnet, you should use two seperate servers on seperate networks for security reasons - public static let parseNodeURL = URL(string: "https://rpc.ghostnet.teztnets.xyz")! + /// The default testnet URLs to use for estimating and injecting operations + public static let nodeURLs = [URL(string: "https://ghostnet.smartpy.io")!, URL(string: "https://rpc.ghostnet.tzboot.net")!] /// The default testnet URL to use for `tzktURL`, For more information on this service, see: https://api.tzkt.io/ public static let tzktURL = URL(string: "https://api.ghostnet.tzkt.io/")! @@ -78,11 +71,8 @@ public struct TezosNodeClientConfig { // MARK: - Public Properties - /// The main URL used for remote forging, fetching balances, setting delegates and other forms of queries and operations. - public let primaryNodeURL: URL - - /// When using remote forging, it is essential to use a second server to verify the contents of the remote forge match what the library sent. - public let parseNodeURL: URL? + /// An array of Node URLs. Default to first, and fallback to rest one by one to attempt to avoid server side issues + public let nodeURLs: [URL] /// Controls whether to use local forging or remote forging+parsing public let forgingType: ForgingType @@ -114,8 +104,7 @@ public struct TezosNodeClientConfig { /** Private Init to prevent users from making mistakes with remote forging settings. - - parameter primaryNodeURL: The URL of the primary node that will perform the majority of the network operations. - - parameter parseNodeURL: The URL to use to parse and verify a remote forge. + - parameter nodeURLs: An array of URLs to use to estiamte and inject operations. Default to first and fallback to others as needed - parameter forgeType: Enum to indicate whether to use local or remote forging. - parameter tzktURL: The URL to use for `TzKTClient`. - parameter betterCallDevURL: The URL to use for `BetterCallDevClient`. @@ -123,9 +112,8 @@ public struct TezosNodeClientConfig { - parameter urlSession: The URLSession object that will perform all the network operations. - parameter networkType: Enum indicating the network type. */ - private init(primaryNodeURL: URL, parseNodeURL: URL?, forgingType: ForgingType, tzktURL: URL, betterCallDevURL: URL, tezosDomainsURL: URL, objktApiURL: URL, urlSession: URLSession, networkType: NetworkType) { - self.primaryNodeURL = primaryNodeURL - self.parseNodeURL = primaryNodeURL + private init(nodeURLs: [URL], forgingType: ForgingType, tzktURL: URL, betterCallDevURL: URL, tezosDomainsURL: URL, objktApiURL: URL, urlSession: URLSession, networkType: NetworkType) { + self.nodeURLs = nodeURLs self.forgingType = forgingType self.tzktURL = tzktURL self.betterCallDevURL = betterCallDevURL @@ -146,8 +134,7 @@ public struct TezosNodeClientConfig { switch networkType { case .mainnet: - primaryNodeURL = TezosNodeClientConfig.defaultMainnetURLs.primaryNodeURL - parseNodeURL = TezosNodeClientConfig.defaultMainnetURLs.parseNodeURL + nodeURLs = TezosNodeClientConfig.defaultMainnetURLs.nodeURLs forgingType = .local tzktURL = TezosNodeClientConfig.defaultMainnetURLs.tzktURL betterCallDevURL = TezosNodeClientConfig.defaultMainnetURLs.betterCallDevURL @@ -155,8 +142,7 @@ public struct TezosNodeClientConfig { objktApiURL = TezosNodeClientConfig.defaultMainnetURLs.objktApiURL case .testnet: - primaryNodeURL = TezosNodeClientConfig.defaultTestnetURLs.primaryNodeURL - parseNodeURL = TezosNodeClientConfig.defaultTestnetURLs.parseNodeURL + nodeURLs = TezosNodeClientConfig.defaultTestnetURLs.nodeURLs forgingType = .local tzktURL = TezosNodeClientConfig.defaultTestnetURLs.tzktURL betterCallDevURL = TezosNodeClientConfig.defaultTestnetURLs.betterCallDevURL @@ -167,17 +153,16 @@ public struct TezosNodeClientConfig { /** Creates an instance of `TezosNodeClientConfig` with only the required properties needed when using local forge. - - parameter primaryNodeURL: The URL of the primary node that will perform the majority of the network operations. + - parameter nodeURLs: An array of URLs to use to estiamte and inject operations. Default to first and fallback to others as needed - parameter tzktURL: The URL to use for `TzKTClient`. - parameter betterCallDevURL: The URL to use for `BetterCallDevClient`. - parameter urlSession: The URLSession object that will perform all the network operations. - parameter networkType: Enum indicating the network type. - returns TezosNodeClientConfig */ - public static func configWithLocalForge(primaryNodeURL: URL, tzktURL: URL, betterCallDevURL: URL, tezosDomainsURL: URL, objktApiURL: URL, urlSession: URLSession, networkType: NetworkType) -> TezosNodeClientConfig { + public static func configWithLocalForge(nodeURLs: [URL], tzktURL: URL, betterCallDevURL: URL, tezosDomainsURL: URL, objktApiURL: URL, urlSession: URLSession, networkType: NetworkType) -> TezosNodeClientConfig { return TezosNodeClientConfig( - primaryNodeURL: primaryNodeURL, - parseNodeURL: nil, + nodeURLs: nodeURLs, forgingType: .local, tzktURL: tzktURL, betterCallDevURL: betterCallDevURL, @@ -188,23 +173,21 @@ public struct TezosNodeClientConfig { } /** - Creates an instance of `TezosNodeClientConfig` with the required properties for remote forging. Note: function will casue a `fatalError` is users attempt to set `primaryNodeURL` and `parseNodeURL` to the same destination - - parameter primaryNodeURL: The URL of the primary node that will perform the majority of the network operations. - - parameter parseNodeURL: The URL to use to parse and verify a remote forge. Must be a different server to primary node. + Creates an instance of `TezosNodeClientConfig` with the required properties for remote forging. Note: function will casue a `fatalError` if supplied with less than 2 `nodeURLs` + - parameter nodeURLs: An array of URLs to use to estiamte and inject operations. Default to first and fallback to others as needed - parameter tzktURL: The URL to use for `TzKTClient`. - parameter betterCallDevURL: The URL to use for `BetterCallDevClient`. - parameter urlSession: The URLSession object that will perform all the network operations. - parameter networkType: Enum indicating the network type. - returns TezosNodeClientConfig */ - public static func configWithRemoteForge(primaryNodeURL: URL, parseNodeURL: URL, tzktURL: URL, betterCallDevURL: URL, tezosDomainsURL: URL, objktApiURL: URL, urlSession: URLSession, networkType: NetworkType) -> TezosNodeClientConfig { - if primaryNodeURL.absoluteString == parseNodeURL.absoluteString { - fatalError("Setting the `primaryNodeURL` and the `parseNodeURL` to the same server poses a huge security risk, called a 'Blind signature attack'. Doing so is forbidden in this library.") + public static func configWithRemoteForge(nodeURLs: [URL], parseNodeURL: URL, tzktURL: URL, betterCallDevURL: URL, tezosDomainsURL: URL, objktApiURL: URL, urlSession: URLSession, networkType: NetworkType) -> TezosNodeClientConfig { + if nodeURLs.count >= 2 { + fatalError("remote forging requires using different servers to prevent against man in the middle attacks. You must supply at least 2 URLs") } return TezosNodeClientConfig( - primaryNodeURL: primaryNodeURL, - parseNodeURL: parseNodeURL, + nodeURLs: nodeURLs, forgingType: .remote, tzktURL: tzktURL, betterCallDevURL: betterCallDevURL, diff --git a/Sources/KukaiCoreSwift/Models/CurrentDevice.swift b/Sources/KukaiCoreSwift/Models/CurrentDevice.swift index 8ea6860c..b782a270 100644 --- a/Sources/KukaiCoreSwift/Models/CurrentDevice.swift +++ b/Sources/KukaiCoreSwift/Models/CurrentDevice.swift @@ -46,7 +46,7 @@ public enum CurrentDevice { return .touchID case .faceID: return .faceID - @unknown default: + default: return .none } } @@ -66,7 +66,7 @@ public enum CurrentDevice { return .touchID case .faceID: return .faceID - @unknown default: + default: return .none } } diff --git a/Sources/KukaiCoreSwift/Models/LedgerWallet.swift b/Sources/KukaiCoreSwift/Models/LedgerWallet.swift index 6d98b55b..9e74f11b 100644 --- a/Sources/KukaiCoreSwift/Models/LedgerWallet.swift +++ b/Sources/KukaiCoreSwift/Models/LedgerWallet.swift @@ -106,7 +106,7 @@ public class LedgerWallet: Wallet { Function to convert the public key into a Base58 encoded string */ public func publicKeyBase58encoded() -> String { - let publicKeyData = (try? Data(hexString: publicKey)) ?? Data() + let publicKeyData = Data(hexString: publicKey) ?? Data() return Base58Check.encode(message: publicKeyData.bytes, prefix: Prefix.Keys.Ed25519.public) } } diff --git a/Sources/KukaiCoreSwift/Models/Operation/Operation.swift b/Sources/KukaiCoreSwift/Models/Operation/Operation.swift index db4d199b..700ba5c6 100644 --- a/Sources/KukaiCoreSwift/Models/Operation/Operation.swift +++ b/Sources/KukaiCoreSwift/Models/Operation/Operation.swift @@ -62,22 +62,13 @@ public class Operation: Codable { source = try container.decodeIfPresent(String.self, forKey: .source) counter = try container.decodeIfPresent(String.self, forKey: .counter) + // When coming from Wallet Connect, operations may include suggested gas, storage or fee + // Each one is optional, and will be used later on as + let storage = Int(try container.decodeIfPresent(String.self, forKey: .storageLimit) ?? "0") ?? 0 + let gas = Int(try container.decodeIfPresent(String.self, forKey: .gasLimit) ?? "0") ?? 0 + let feeString = try container.decodeIfPresent(String.self, forKey: .fee) ?? "0" - // When we encode, we encode all properties. But when coming from beacon it will sometimes supply a suggestion for gas and storage, but will not include a fee - // When we have all, just encode - if let storageInt = Int(try container.decodeIfPresent(String.self, forKey: .storageLimit) ?? ""), - let gasInt = Int(try container.decodeIfPresent(String.self, forKey: .gasLimit) ?? ""), - let feeString = try container.decodeIfPresent(String.self, forKey: .fee) { - operationFees = OperationFees(transactionFee: XTZAmount(fromRpcAmount: feeString) ?? XTZAmount.zero(), gasLimit: gasInt, storageLimit: storageInt) - } - - // When we have gas and storage suggestions, encode those and compute a fee - else if let storageInt = Int(try container.decodeIfPresent(String.self, forKey: .storageLimit) ?? ""), - let gasInt = Int(try container.decodeIfPresent(String.self, forKey: .gasLimit) ?? "") { - - let fee = XTZAmount.zero() // Fee will need to be computed outside. Requires network calls to see current constants and forging the JSON. Can't be done here - operationFees = OperationFees(transactionFee: fee, gasLimit: gasInt, storageLimit: storageInt) - } + operationFees = OperationFees(transactionFee: XTZAmount(fromRpcAmount: feeString) ?? XTZAmount.zero(), gasLimit: gas, storageLimit: storage) } else { source = nil @@ -159,7 +150,7 @@ extension Array where Element == Operation { case .transaction: tempOp = try? JSONDecoder().decode(OperationTransaction.self, from: jsonObjAsData) case .unknown: - tempOp = nil + tempOp = try? JSONDecoder().decode(OperationUnknown.self, from: jsonObjAsData) } if let tempOp = tempOp { diff --git a/Sources/KukaiCoreSwift/Models/Operation/OperationDelegation.swift b/Sources/KukaiCoreSwift/Models/Operation/OperationDelegation.swift index e37f2178..e277f854 100644 --- a/Sources/KukaiCoreSwift/Models/Operation/OperationDelegation.swift +++ b/Sources/KukaiCoreSwift/Models/Operation/OperationDelegation.swift @@ -35,7 +35,7 @@ public class OperationDelegation: Operation { */ public required init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: CodingKeys.self) - delegate = try container.decode(String.self, forKey: .delegate) + delegate = try container.decodeIfPresent(String.self, forKey: .delegate) try super.init(from: decoder) } @@ -47,7 +47,7 @@ public class OperationDelegation: Operation { public override func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) if let del = delegate { - try container.encode(del, forKey: .delegate) + try container.encodeIfPresent(del, forKey: .delegate) } try super.encode(to: encoder) diff --git a/Sources/KukaiCoreSwift/Models/Operation/OperationOrigination.swift b/Sources/KukaiCoreSwift/Models/Operation/OperationOrigination.swift index 33ce9839..794a591a 100644 --- a/Sources/KukaiCoreSwift/Models/Operation/OperationOrigination.swift +++ b/Sources/KukaiCoreSwift/Models/Operation/OperationOrigination.swift @@ -15,7 +15,7 @@ public class OperationOrigination: Operation { public let balance: String /// Dictionary holding the `code` and `storage` of the contract to create. - public let script: [String: String] + public let script: [String: Any] enum CodingKeys: String, CodingKey { case balance @@ -46,7 +46,7 @@ public class OperationOrigination: Operation { public required init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: CodingKeys.self) balance = try container.decode(String.self, forKey: .balance) - script = try container.decode([String: String].self, forKey: .script) + script = try container.decode([String: Any].self, forKey: .script) try super.init(from: decoder) } @@ -73,6 +73,16 @@ public class OperationOrigination: Operation { return superResult && balance == op.balance && - script == op.script + doScriptsMatch(lhs: script, rhs: op.script) + } + + private func doScriptsMatch(lhs: [String: Any], rhs: [String: Any]) -> Bool { + for key in lhs.keys { + if "\(String(describing: lhs[key]))" != "\(String(describing: rhs[key]))" { + return false + } + } + + return true } } diff --git a/Sources/KukaiCoreSwift/Models/Operation/OperationResponse.swift b/Sources/KukaiCoreSwift/Models/Operation/OperationResponse.swift index bfe2ca89..d1de0c07 100644 --- a/Sources/KukaiCoreSwift/Models/Operation/OperationResponse.swift +++ b/Sources/KukaiCoreSwift/Models/Operation/OperationResponse.swift @@ -52,6 +52,18 @@ public struct OperationResponseContent: Codable { let kind: String let source: String? let metadata: OperationResponseMetadata + let destination: String? + let amount: String? + let fee: String? + let balance: String? + + public func isOrigination() -> Bool { + if kind == "origination" { + return true + } + + return false + } } /// The metadata belonging to the `OperationResponse` diff --git a/Sources/KukaiCoreSwift/Models/Operation/OperationTransaction.swift b/Sources/KukaiCoreSwift/Models/Operation/OperationTransaction.swift index 41d064ea..d5bc23a5 100644 --- a/Sources/KukaiCoreSwift/Models/Operation/OperationTransaction.swift +++ b/Sources/KukaiCoreSwift/Models/Operation/OperationTransaction.swift @@ -34,6 +34,10 @@ public class OperationTransaction: Operation { case investLiquidity case divestLiquidity case withdrawProfit + case execute // 3route + case deposit // crunchy - stake + case offer // OBJKT - make offer + case bid // OBJKT - bid on auction } enum CodingKeys: String, CodingKey { @@ -110,7 +114,7 @@ public class OperationTransaction: Operation { // encodeIfPresent still printing "parameters: null". Not sure if apple bug or mistake if let params = parameters { - try container.encodeIfPresent(params, forKey: .parameters) + try container.encode(params, forKey: .parameters) } try super.encode(to: encoder) diff --git a/Sources/KukaiCoreSwift/Models/Operation/OperationUnknown.swift b/Sources/KukaiCoreSwift/Models/Operation/OperationUnknown.swift new file mode 100644 index 00000000..fb152ac2 --- /dev/null +++ b/Sources/KukaiCoreSwift/Models/Operation/OperationUnknown.swift @@ -0,0 +1,123 @@ +// +// OperationUnknown.swift +// +// +// Created by Simon Mcloughlin on 11/01/2024. +// + +import Foundation +import OSLog + +public enum OperationUnknownError: Error { + case unableToRegisterKey +} + +/// A subclass of `Operation` meant to catch any, currently, unsupported operations. The Tezos protocol can add new operations at any time. If not `Codable` struct / class is present to parse it, then that operation can't be performed. +/// This class allows for clients to parse the JSON, capturing all of the data, enabling the ability to add counter, source and fees, without needing to know what type of operation it is. +/// Class can be encoded as JSON and presented to the user to confirm if they want to trust it or not +public class OperationUnknown: Operation { + + /// Allows to use Codable encoder and decoder, with CodingKey, without knowing in advanced what they keys are + struct DynamicCodingKey : CodingKey { + var stringValue: String + init?(stringValue: String) { + self.stringValue = stringValue + } + + var intValue: Int? { return nil } + init?(intValue: Int) { return nil } + } + + /// We need to capture and return whatever `kind` value is supplied. But due to the fact that `Operation` will parse this as an enum, with a fixed number of cases + /// we need to capture it seperately and overwrite `kind` during the encode process + public let unknownKind: String + + /// A dicitoanry containing all the top level keys and values. May contain string, decimal, bool, array of type Any, or dictionary of type [String: Any] + public let allOtherProperties: [String: Any] + + + + + // MARK: - Codable + + /// Iterate through every key in the JSON and capture them all. Pass the object up to the super to pull out source, counter, fees etc + public required init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKey.self) + + var allProperties: [String: Any] = [:] + for key in container.allKeys { + + if let value = try? container.decodeIfPresent(String.self, forKey: key) { + allProperties[key.stringValue] = value + + } else if let value = try? container.decodeIfPresent(Decimal.self, forKey: key) { + allProperties[key.stringValue] = value + + } else if let value = try? container.decodeIfPresent(Bool.self, forKey: key) { + allProperties[key.stringValue] = value + + } else if let value = try? container.decodeIfPresent([String:Any].self, forKey: key) { + allProperties[key.stringValue] = value + + } else if let value = try? container.decodeIfPresent([Any].self, forKey: key) { + allProperties[key.stringValue] = value + + } else { + Logger.kukaiCoreSwift.error("Unable to extract property for OperationUnknown. Value of unknown type for key: \(key)") + } + } + + unknownKind = allProperties["kind"] as? String ?? "unknown" + allOtherProperties = allProperties + + try super.init(from: decoder) + } + + /// Encode all values from `allOtherProperties` into a JSON dictionary, use unknownKind as the `kind` value, and then add anything applied to the super class + public override func encode(to encoder: Encoder) throws { + guard let kindKey = DynamicCodingKey(stringValue: "kind") else { + throw OperationUnknownError.unableToRegisterKey + } + + var container = encoder.container(keyedBy: DynamicCodingKey.self) + + // Manually handle Kind + try? container.encode(unknownKind, forKey: kindKey) + + // Process all stored values + for keyString in allOtherProperties.keys { + if let key = DynamicCodingKey(stringValue: keyString) { + if let val = allOtherProperties[keyString] as? String { + try? container.encode(val, forKey: key) + + } else if let val = allOtherProperties[keyString] as? Decimal { + try? container.encode(val, forKey: key) + + } else if let val = allOtherProperties[keyString] as? Bool { + try? container.encode(val, forKey: key) + + } else if let val = allOtherProperties[keyString] as? [Any] { + try? container.encode(val, forKey: key) + + } else if let val = allOtherProperties[keyString] as? [String: Any] { + try? container.encode(val, forKey: key) + } + } + } + + // Handle any super class properties that weren't inside allProperties. Due to kind be handled already, we can't rely on super + if allOtherProperties["source"] == nil, let key = DynamicCodingKey(stringValue: "source") { + try? container.encodeIfPresent(self.source, forKey: key) + } + + if allOtherProperties["counter"] == nil, let key = DynamicCodingKey(stringValue: "counter") { + try? container.encodeIfPresent(self.counter, forKey: key) + } + + if let storageKey = DynamicCodingKey(stringValue: "storage_limit"), let gasKey = DynamicCodingKey(stringValue: "gas_limit"), let feeKey = DynamicCodingKey(stringValue: "fee") { + try container.encode("\(operationFees.storageLimit)", forKey: storageKey) + try container.encode("\(operationFees.gasLimit)", forKey: gasKey) + try container.encode(operationFees.transactionFee.rpcRepresentation, forKey: feeKey) + } + } +} diff --git a/Sources/KukaiCoreSwift/Models/RPC.swift b/Sources/KukaiCoreSwift/Models/RPC.swift index ba565a35..0900f0e7 100644 --- a/Sources/KukaiCoreSwift/Models/RPC.swift +++ b/Sources/KukaiCoreSwift/Models/RPC.swift @@ -48,9 +48,12 @@ public class RPC { } /// Helper function to wrap up `JSONEncoder().encode` and log any errors. - public static func encodableToData(encodable: T) -> Data? { + public static func encodableToData(encodable: E) -> Data? { do { - return try JSONEncoder().encode(encodable) + let encoder = JSONEncoder() + encoder.outputFormatting = [.sortedKeys] + + return try encoder.encode(encodable) } catch(let error) { Logger.kukaiCoreSwift.error("Unable to encode object as string: \(error)") @@ -175,7 +178,7 @@ extension RPC where T == [OperationResponse] { extension RPC where T == OperationResponse { - /// Creates an RPC to estimate an operation + /// Creates an RPC to estimate an operation - deprecated public static func runOperation(runOperationPayload: RunOperationPayload) -> RPC? { guard let payloadData = RPC.encodableToData(encodable: runOperationPayload) else { return nil @@ -183,6 +186,15 @@ extension RPC where T == OperationResponse { return RPC(endpoint: "chains/main/blocks/head/helpers/scripts/run_operation", payload: payloadData, responseType: OperationResponse.self) } + + /// Creates an RPC to estimate an operation + public static func simulateOperation(runOperationPayload: RunOperationPayload) -> RPC? { + guard let payloadData = RPC.encodableToData(encodable: runOperationPayload) else { + return nil + } + + return RPC(endpoint: "chains/main/blocks/head/helpers/scripts/simulate_operation?version=0", payload: payloadData, responseType: OperationResponse.self) + } } extension RPC where T == Data { diff --git a/Sources/KukaiCoreSwift/Models/RegularWallet.swift b/Sources/KukaiCoreSwift/Models/RegularWallet.swift index 87f7d3c8..0baca865 100644 --- a/Sources/KukaiCoreSwift/Models/RegularWallet.swift +++ b/Sources/KukaiCoreSwift/Models/RegularWallet.swift @@ -61,7 +61,7 @@ public class RegularWallet: Wallet { /** Create a `RegularWallet` by supplying a `Mnemonic` and a passphrase (or "" if none). - - Parameter withMnemonic: A `Mnemonic` representing a BIP39 menmonic + - Parameter withMnemonic: A `Mnemonic` representing a BIP39 mnemonic - Parameter passphrase: String contianing a passphrase, or empty string if none */ public init?(withMnemonic mnemonic: Mnemonic, passphrase: String) { @@ -76,6 +76,49 @@ public class RegularWallet: Wallet { self.mnemonic = mnemonic } + /** + Create a `RegularWallet` by supplying a `Mnemonic` that has been shifted and a passphrase (or "" if none). + - Parameter withShiftedMnemonic: A `Mnemonic` representing a BIP39 mnemonic that has been shifted to support social recovery + - Parameter passphrase: String contianing a passphrase, or empty string if none + */ + public init?(withShiftedMnemonic shiftedMnemonic: Mnemonic, passphrase: String) { + guard let normalMnemonic = Mnemonic.shiftedMnemonicToMnemonic(mnemonic: shiftedMnemonic), + let normalSpsk = Mnemonic.mnemonicToSpsk(mnemonic: normalMnemonic), + let normalSpskBytes = Base58Check.decode(string: normalSpsk, prefix: Prefix.Keys.Secp256k1.secret) else { + return nil + } + + let normalPrivateKey = PrivateKey(normalSpskBytes, signingCurve: .secp256k1) + + guard let normalPublicKey = KeyPair.secp256k1PublicKey(fromPrivateKeyBytes: normalPrivateKey.bytes), + let pkh = normalPublicKey.publicKeyHash else { + return nil + } + + self.type = .regularShifted + self.address = pkh + self.privateKey = normalPrivateKey + self.publicKey = normalPublicKey + self.mnemonic = shiftedMnemonic + } + + /** + Create a `RegularWallet` by supplying a a Base58 encoded string containing a secret key. Both encrypted and unencrypted are supported. Supports Tz1 and Tz2 + - Parameter fromSecretKey: A String containing a Base58Check encoded secret key + - Parameter passphrase: An optional string containing the passphrase used to encrypt the secret key + */ + public init?(fromSecretKey secretKey: String, passphrase: String?) { + guard let keyPair = KeyPair.regular(fromSecretKey: secretKey, andPassphrase: passphrase), let address = keyPair.publicKey.publicKeyHash else { + return nil + } + + self.type = .regular + self.address = address + self.privateKey = keyPair.privateKey + self.publicKey = keyPair.publicKey + self.mnemonic = nil + } + /** Create a `RegularWallet` by asking for a mnemonic of a given number of words and a passphrase (or "" if none). - Parameter withMnemonicLength: `Mnemonic.NumberOfWords` the number of words to use when creating a mnemonic diff --git a/Sources/KukaiCoreSwift/Models/SVGImageProcessor.swift b/Sources/KukaiCoreSwift/Models/SVGImageProcessor.swift deleted file mode 100644 index ab90e6ca..00000000 --- a/Sources/KukaiCoreSwift/Models/SVGImageProcessor.swift +++ /dev/null @@ -1,28 +0,0 @@ -// -// SVGImageProcessor.swift -// -// -// Created by Simon Mcloughlin on 18/08/2021. -// - -import UIKit -import Kingfisher -import SVGKit - -/// SVG image processor for Kingfisher library -public struct SVGImgProcessor: ImageProcessor { - - public var identifier: String = "app.kukai.mobile.webpprocessor" - - public func process(item: ImageProcessItem, options: KingfisherParsedOptionsInfo) -> KFCrossPlatformImage? { - - switch item { - case .image(let image): - return image - - case .data(let data): - let imsvg = SVGKImage(data: data) - return imsvg?.uiImage - } - } -} diff --git a/Sources/KukaiCoreSwift/Models/Wallet.swift b/Sources/KukaiCoreSwift/Models/Wallet.swift index 06e82dba..fc28ab83 100644 --- a/Sources/KukaiCoreSwift/Models/Wallet.swift +++ b/Sources/KukaiCoreSwift/Models/Wallet.swift @@ -14,6 +14,7 @@ import KukaiCryptoSwift /// Enum to distingush between linear (non-hd) wallets, using the Bip39 standard, and hd wallets using the Bip44 standard. public enum WalletType: String, Codable { case regular + case regularShifted case hd case social case ledger diff --git a/Sources/KukaiCoreSwift/Models/WalletMetadata.swift b/Sources/KukaiCoreSwift/Models/WalletMetadata.swift index b792c533..2f80775d 100644 --- a/Sources/KukaiCoreSwift/Models/WalletMetadata.swift +++ b/Sources/KukaiCoreSwift/Models/WalletMetadata.swift @@ -75,6 +75,16 @@ public struct WalletMetadataList: Codable, Hashable { return nil } + public func parentMetadata(forChildAddress address: String) -> WalletMetadata? { + for metadata in hdWallets { + for childMetadata in metadata.children { + if childMetadata.address == address { return metadata } + } + } + + return nil + } + public mutating func update(address: String, with newMetadata: WalletMetadata) -> Bool { for (index, metadata) in socialWallets.enumerated() { if metadata.address == address { socialWallets[index] = newMetadata; return true } @@ -226,6 +236,7 @@ public struct WalletMetadata: Codable, Hashable { public var hdWalletGroupName: String? public var walletNickname: String? public var socialUsername: String? + public var socialUserId: String? public var mainnetDomains: [TezosDomainsReverseRecord]? public var ghostnetDomains: [TezosDomainsReverseRecord]? public var socialType: TorusAuthProvider? @@ -276,11 +287,12 @@ public struct WalletMetadata: Codable, Hashable { } } - public init(address: String, hdWalletGroupName: String?, walletNickname: String? = nil, socialUsername: String? = nil, mainnetDomains: [TezosDomainsReverseRecord]? = nil, ghostnetDomains: [TezosDomainsReverseRecord]? = nil, socialType: TorusAuthProvider? = nil, type: WalletType, children: [WalletMetadata], isChild: Bool, isWatchOnly: Bool, bas58EncodedPublicKey: String, backedUp: Bool) { + public init(address: String, hdWalletGroupName: String?, walletNickname: String? = nil, socialUsername: String? = nil, socialUserId: String? = nil, mainnetDomains: [TezosDomainsReverseRecord]? = nil, ghostnetDomains: [TezosDomainsReverseRecord]? = nil, socialType: TorusAuthProvider? = nil, type: WalletType, children: [WalletMetadata], isChild: Bool, isWatchOnly: Bool, bas58EncodedPublicKey: String, backedUp: Bool) { self.address = address self.hdWalletGroupName = hdWalletGroupName self.walletNickname = walletNickname self.socialUsername = socialUsername + self.socialUserId = socialUserId self.mainnetDomains = mainnetDomains self.ghostnetDomains = ghostnetDomains self.socialType = socialType @@ -293,10 +305,14 @@ public struct WalletMetadata: Codable, Hashable { } public static func == (lhs: WalletMetadata, rhs: WalletMetadata) -> Bool { - return lhs.address == rhs.address + return lhs.address == rhs.address && + lhs.isChild == rhs.isChild && + lhs.isWatchOnly == rhs.isWatchOnly } public func hash(into hasher: inout Hasher) { hasher.combine(address) + hasher.combine(isChild) + hasher.combine(isWatchOnly) } } diff --git a/Sources/KukaiCoreSwift/PrivacyInfo.xcprivacy b/Sources/KukaiCoreSwift/PrivacyInfo.xcprivacy new file mode 100644 index 00000000..d37d6275 --- /dev/null +++ b/Sources/KukaiCoreSwift/PrivacyInfo.xcprivacy @@ -0,0 +1,14 @@ + + + + + NSPrivacyCollectedDataTypes + + NSPrivacyAccessedAPITypes + + NSPrivacyTrackingDomains + + NSPrivacyTracking + + + diff --git a/Sources/KukaiCoreSwift/Services/ErrorHandlingService.swift b/Sources/KukaiCoreSwift/Services/ErrorHandlingService.swift index ab0d0aab..a8b42821 100644 --- a/Sources/KukaiCoreSwift/Services/ErrorHandlingService.swift +++ b/Sources/KukaiCoreSwift/Services/ErrorHandlingService.swift @@ -71,8 +71,8 @@ public struct KukaiError: CustomStringConvertible, Error { // MARK: - Constructors /// Create a KukaiError from an RPC string (will not be validated). You can use the string extension `.removeLeadingProtocolFromRPCError()` to strip the leading poriton of the error - public static func rpcError(rpcErrorString: String, andFailWith: FailWith?) -> KukaiError { - return KukaiError(errorType: .rpc, knownErrorMessage: nil, subType: nil, rpcErrorString: rpcErrorString, failWith: andFailWith, requestURL: nil, requestJSON: nil, responseJSON: nil, httpStatusCode: nil) + public static func rpcError(rpcErrorString: String, andFailWith: FailWith?, requestURL: URL?) -> KukaiError { + return KukaiError(errorType: .rpc, knownErrorMessage: nil, subType: nil, rpcErrorString: rpcErrorString, failWith: andFailWith, requestURL: requestURL, requestJSON: nil, responseJSON: nil, httpStatusCode: nil) } /// Create a KukaiError denoting a sytem issue from the OS, by passing in the system Error type @@ -199,6 +199,18 @@ public struct KukaiError: CustomStringConvertible, Error { return "HTTP Status \(statusCode) \nUnable to communicate with: \(url.absoluteStringByTrimmingQuery() ?? url.absoluteString)" } } + + + + // MARK: - Central callback parsers + + /** + Allow the delegate of the error callback the ability to decide what errors to log or not by detecting the high level type of error being generated + */ + public func isTimeout() -> Bool { + return (self.subType?.domain == "NSURLErrorDomain" && self.subType?.code == -1001) || + (self.underlyingError?.domain == "NSURLErrorDomain" && self.underlyingError?.code == -1001) + } } @@ -224,7 +236,7 @@ public class ErrorHandlingService { // MARK: - Error parsers /// Convert an `OperationResponseInternalResultError` into a `KukaiError` and optionally log it to the central logger - public static func fromOperationError(_ opError: OperationResponseInternalResultError, andLog: Bool = true) -> KukaiError { + public static func fromOperationError(_ opError: OperationResponseInternalResultError, requestURL: URL?, andLog: Bool = true) -> KukaiError { let errorWithoutProtocol = opError.id.removeLeadingProtocolFromRPCError() var errorToReturn = KukaiError(errorType: .rpc, knownErrorMessage: nil, subType: nil, rpcErrorString: errorWithoutProtocol, failWith: nil, requestURL: nil, requestJSON: nil, responseJSON: nil, httpStatusCode: nil) @@ -233,19 +245,19 @@ public class ErrorHandlingService { if let failwith = withError.int, let failwithInt = Int(failwith) { // Smart contract failwith reached with an Int denoting an error code // Liquidity baking error codes, need to consider how to incorporate: https://gitlab.com/dexter2tz/dexter2tz/-/blob/liquidity_baking/dexter.liquidity_baking.mligo#L85 - errorToReturn = KukaiError.rpcError(rpcErrorString: "A FAILWITH instruction was reached: {\"int\": \(failwithInt)}", andFailWith: opError.with) + errorToReturn = KukaiError.rpcError(rpcErrorString: "A FAILWITH instruction was reached: {\"int\": \(failwithInt)}", andFailWith: opError.with, requestURL: requestURL) } else if let failwith = withError.string { // Smart contract failwith reached with an String error message - errorToReturn = KukaiError.rpcError(rpcErrorString: "A FAILWITH instruction was reached: {\"string\": \(failwith)}", andFailWith: opError.with) + errorToReturn = KukaiError.rpcError(rpcErrorString: "A FAILWITH instruction was reached: {\"string\": \(failwith)}", andFailWith: opError.with, requestURL: requestURL) } else if let args = withError.args { // Smart Contract failwith reached with a dictionary - errorToReturn = KukaiError.rpcError(rpcErrorString: "A FAILWITH instruction was reached: {\"args\": \(args)}", andFailWith: opError.with) + errorToReturn = KukaiError.rpcError(rpcErrorString: "A FAILWITH instruction was reached: {\"args\": \(args)}", andFailWith: opError.with, requestURL: requestURL) } else { // Unknown smart contract error - errorToReturn = KukaiError.rpcError(rpcErrorString: "michelson_v1.runtime_error", andFailWith: opError.with) + errorToReturn = KukaiError.rpcError(rpcErrorString: "michelson_v1.runtime_error", andFailWith: opError.with, requestURL: requestURL) } } @@ -254,9 +266,9 @@ public class ErrorHandlingService { } /// Search an `OperationResponse` to see does it contain any errors, if so return the last one as a `KukaiError` and optionally log it to the central logger - public static func searchOperationResponseForErrors(_ opResponse: OperationResponse, andLog: Bool = true) -> KukaiError? { + public static func searchOperationResponseForErrors(_ opResponse: OperationResponse, requestURL: URL?, andLog: Bool = true) -> KukaiError? { if let lastError = opResponse.errors().last { - let errorToReturn = ErrorHandlingService.fromOperationError(lastError) + let errorToReturn = ErrorHandlingService.fromOperationError(lastError, requestURL: requestURL) if andLog { logAndCallback(withKukaiError: errorToReturn) } return errorToReturn @@ -266,9 +278,9 @@ public class ErrorHandlingService { } /// Search an `[OperationResponse]` to see does it contain any errors, if so return the last one as a`KukaiError` and optionally log it to the central logger - public static func searchOperationResponseForErrors(_ opResponse: [OperationResponse], andLog: Bool = true) -> KukaiError? { + public static func searchOperationResponseForErrors(_ opResponse: [OperationResponse], requestURL: URL?, andLog: Bool = true) -> KukaiError? { if let lastError = opResponse.flatMap({ $0.errors() }).last { - let errorToReturn = ErrorHandlingService.fromOperationError(lastError) + let errorToReturn = ErrorHandlingService.fromOperationError(lastError, requestURL: requestURL) if andLog { logAndCallback(withKukaiError: errorToReturn) } return errorToReturn @@ -299,7 +311,7 @@ public class ErrorHandlingService { let lastError = errorArray.last, let errorString = lastError.id.removeLeadingProtocolFromRPCError() { - errorToReturn = KukaiError.rpcError(rpcErrorString: errorString, andFailWith: lastError.with) + errorToReturn = KukaiError.rpcError(rpcErrorString: errorString, andFailWith: lastError.with, requestURL: requestURL) } else { errorToReturn.addNetworkData(requestURL: requestURL, requestJSON: requestData, responseJSON: data, httpStatusCode: httpResponse.statusCode) } diff --git a/Sources/KukaiCoreSwift/Services/FeeEstimatorService.swift b/Sources/KukaiCoreSwift/Services/FeeEstimatorService.swift index 1a66bf71..0ff3f790 100644 --- a/Sources/KukaiCoreSwift/Services/FeeEstimatorService.swift +++ b/Sources/KukaiCoreSwift/Services/FeeEstimatorService.swift @@ -115,6 +115,7 @@ public class FeeEstimatorService { constants: constants, signingCurve: ellipticalCurve, originalRemoteOps: originalRemoteOps, + fromAddress: walletAddress, completion: completion) } @@ -127,6 +128,7 @@ public class FeeEstimatorService { constants: constants, signingCurve: ellipticalCurve, originalRemoteOps: originalRemoteOps, + fromAddress: walletAddress, completion: completion) } } @@ -140,6 +142,7 @@ public class FeeEstimatorService { constants: NetworkConstants, signingCurve: EllipticalCurve, originalRemoteOps: [Operation], + fromAddress address: String, completion: @escaping ((Result) -> Void)) { switch forgeResult { @@ -148,7 +151,7 @@ public class FeeEstimatorService { mutablePayload.addSignature(FeeEstimatorService.defaultSignature, signingCurve: signingCurve) let runOperationPayload = RunOperationPayload(chainID: operationMetadata.chainID, operation: mutablePayload) - self.estimate(runOperationPayload: runOperationPayload, preparedOperationsCopy: preparedOperationsCopy, constants: constants, forgedHex: hexString, originalRemoteOps: originalRemoteOps, completion: completion) + self.estimate(runOperationPayload: runOperationPayload, preparedOperationsCopy: preparedOperationsCopy, constants: constants, forgedHex: hexString, originalRemoteOps: originalRemoteOps, fromAddress: address, completion: completion) case .failure(let error): completion(Result.failure(error)) @@ -157,15 +160,22 @@ public class FeeEstimatorService { } /// Breaking out part of the estimation process to keep code cleaner - private func estimate(runOperationPayload: RunOperationPayload, preparedOperationsCopy: [Operation], constants: NetworkConstants, forgedHex: String, originalRemoteOps: [Operation], completion: @escaping ((Result) -> Void)) { - guard let rpc = RPC.runOperation(runOperationPayload: runOperationPayload) else { + private func estimate(runOperationPayload: RunOperationPayload, + preparedOperationsCopy: [Operation], + constants: NetworkConstants, + forgedHex: String, + originalRemoteOps: [Operation], + fromAddress address: String, + completion: @escaping ((Result) -> Void)) { + + guard let rpc = RPC.simulateOperation(runOperationPayload: runOperationPayload) else { Logger.kukaiCoreSwift.error("Unable to create runOperation RPC, cancelling event") completion(Result.failure(KukaiError.internalApplicationError(error: FeeEstimatorServiceError.unableToSetupRunOperation))) return } - self.networkService.send(rpc: rpc, withBaseURL: config.primaryNodeURL) { [weak self] (result) in - guard let opToProcess = try? result.get(), let fees = self?.extractFees(fromOperationResponse: opToProcess, forgedHash: forgedHex, withConstants: constants) else { + self.networkService.send(rpc: rpc, withNodeURLs: config.nodeURLs) { [weak self] (result) in + guard let opToProcess = try? result.get(), let fees = self?.extractFees(fromOperationResponse: opToProcess, originalRemoteOps: originalRemoteOps, forgedHash: forgedHex, withConstants: constants, fromAddress: address) else { completion(Result.failure( result.getFailure())) return } @@ -176,40 +186,13 @@ public class FeeEstimatorService { return } - - // Operations can come in with suggested fees (e.g. when using a dApp through something like Beacon). - // We always do an estimation and pick which ever is higher, the supplied suggested fees (which should always be worst case, but can be flawed), or the result of the estimation - var lastOpFee: OperationFees = OperationFees(transactionFee: .zero(), gasLimit: 0, storageLimit: 0) - var operationFeesToUse: [OperationFees] = [] - var original = originalRemoteOps - - - // originalOps may not contain a reveal operation, if the first request a user does is wallet connect / beacon. - // Check and add a dummy reveal operation to the "originalOps", so that fees are calcualted correctly - if (preparedOperationsCopy.first is OperationReveal && original.count < preparedOperationsCopy.count) { - let reveal = OperationReveal(base58EncodedPublicKey: "", walletAddress: "") // dummy only used as an OperationsFee placeholder - reveal.operationFees = OperationFees(transactionFee: .zero(), networkFees: fees.first?.networkFees ?? [:], gasLimit: fees.first?.gasLimit ?? 0, storageLimit: fees.first?.storageLimit ?? 0) - original.insert(reveal, at: 0) - } - - - // Check whether to use suggested fees, or estiamted fees - if original.map({ $0.operationFees.gasLimit }).reduce(0, +) > fees.map({ $0.gasLimit }).reduce(0, +) { - lastOpFee = self?.calcFeeFromSuggestedOperations(operations: original, constants: constants, forgedHex: forgedHex) ?? OperationFees.zero() - operationFeesToUse = original.map({ $0.operationFees }) - - } else { - lastOpFee = fees.last ?? OperationFees.zero() - operationFeesToUse = fees - } - - // Set gas, storage and network fees on each operation, but only add transaction fee to last operation. // The entire chain of operations can fail due to one in the middle failing. If that happens, only fees attached to operations that were processed, gets debited for (index, op) in preparedOperationsCopy.enumerated() { - op.operationFees = operationFeesToUse[index] + op.operationFees = fees[index] if index == preparedOperationsCopy.count-1 { + let lastOpFee = fees.last ?? OperationFees.zero() op.operationFees.transactionFee = lastOpFee.transactionFee op.operationFees.networkFees = lastOpFee.networkFees @@ -222,114 +205,130 @@ public class FeeEstimatorService { } } - private func calcFeeFromSuggestedOperations(operations: [Operation], constants: NetworkConstants, forgedHex: String) -> OperationFees { - let totalGas = operations.map({ $0.operationFees.gasLimit }).reduce(0, +) - let totalStorage = operations.map({ $0.operationFees.storageLimit }).reduce(0, +) - - return calcTransactionFee(totalGas: totalGas, opCount: operations.count, totalStorage: totalStorage, forgedHash: forgedHex, constants: constants) - } - /** Create an array of `OperationFees` from an `OperationResponse`. - parameter fromOperationResponse: The `OperationResponse` resulting from an RPC call to `.../run_operation`. - parameter forgedHash: The forged hash string resulting from a call to `TezosNodeClient.forge(...)` - returns: An array of `OperationFees` */ - public func extractFees(fromOperationResponse operationResponse: OperationResponse, forgedHash: String, withConstants constants: NetworkConstants) -> [OperationFees] { + public func extractFees(fromOperationResponse operationResponse: OperationResponse, originalRemoteOps: [Operation], forgedHash: String, withConstants constants: NetworkConstants, fromAddress address: String) -> [OperationFees] { var opFees: [OperationFees] = [] - var totalGas = 0 - var totalStorage = 0 - var totalAllocationFee = XTZAmount.zero() + var totalGas: Decimal = 0 + var totalStorage: Decimal = 0 + + // preparedOperationsCopy may contain an extra reveal operation at the start for (index, content) in operationResponse.contents.enumerated() { - var opGas = 0 - var opStorage = 0 - var opAllocationStorage = 0 // Needs to be included in `storage_limit`, but ignored as a burn fee because it is an "allocation fee" - var opAllocationFee = XTZAmount.zero() + var opGas: Decimal = 0 + var opStorage: Decimal = 0 + let suggestedCompareIndex = (operationResponse.contents.first?.kind == "reveal" && operationResponse.contents.count != originalRemoteOps.count) ? -1 : 0 - let results = extractAndParseAttributes(fromResult: content.metadata.operationResult, withConstants: constants) - opGas = FeeEstimatorService.addGasSafetyMarginTo(gasUsed: results.consumedGas) - opStorage = results.storageBytesUsed - opAllocationFee = results.allocationFee - totalGas += FeeEstimatorService.addGasSafetyMarginTo(gasUsed: results.consumedGas) - totalStorage += results.storageBytesUsed - totalAllocationFee += results.allocationFee + // Storage + if content.source == address { + opStorage -= Decimal(string: content.amount ?? "0") ?? 0 + opStorage -= Decimal(string: content.fee ?? "0") ?? 0 + opStorage -= Decimal(string: content.balance ?? "0") ?? 0 + } - // If we are allocating an address, we need to include it as storage on our operation - if results.allocationFee > XTZAmount.zero() { - opAllocationStorage = constants.bytesForReveal() + if content.destination == address { + opStorage += Decimal(string: content.amount ?? "0") ?? 0 } - if let innerOperationResults = content.metadata.internalOperationResults { - for innerResult in innerOperationResults { - let results = extractAndParseAttributes(fromResult: innerResult.result, withConstants: constants) - opGas += FeeEstimatorService.addGasSafetyMarginTo(gasUsed: results.consumedGas) - opStorage += results.storageBytesUsed - opAllocationFee += results.allocationFee - - totalGas += FeeEstimatorService.addGasSafetyMarginTo(gasUsed: results.consumedGas) - totalStorage += results.storageBytesUsed - totalAllocationFee += results.allocationFee - - // If we are allocating an address, we need to include it as storage on our operation - if results.allocationFee > XTZAmount.zero() { - opAllocationStorage += constants.bytesForReveal() + for balanceUpdate in content.metadata.operationResult?.balanceUpdates ?? [] { + if balanceUpdate.contract == address { + opStorage -= Decimal(string: balanceUpdate.change) ?? 0 + } + } + + for balanceUpdate in content.metadata.balanceUpdates ?? [] { + if balanceUpdate.contract == address { + opStorage -= Decimal(string: balanceUpdate.change) ?? 0 + } + } + + // Gas + opGas += ((Decimal(string: content.metadata.operationResult?.consumedMilligas ?? "0") ?? 0) / 1000).rounded(scale: 0, roundingMode: .up) + for internalResult in content.metadata.internalOperationResults ?? [] { + opGas += ((Decimal(string: internalResult.result.consumedMilligas ?? "0") ?? 0) / 1000).rounded(scale: 0, roundingMode: .up) + + for balanceUpdate in internalResult.result.balanceUpdates ?? [] { + if balanceUpdate.contract == address && balanceUpdate.change.prefix(1) == "-" { + opStorage -= Decimal(string: balanceUpdate.change) ?? 0 } } } + opGas = Decimal(FeeEstimatorService.addGasSafetyMarginTo(gasUsed: opGas.intValue())) + + + // Convert storage to bytes + opStorage = opStorage / (constants.xtzPerByte().toRpcDecimal() ?? 250) + + // Check for reveal + if content.metadata.operationResult?.allocatedDestinationContract == true { + opStorage += Decimal(constants.bytesForReveal()) + } + + for internalResult in content.metadata.internalOperationResults ?? [] { + if internalResult.result.allocatedDestinationContract == true { + opStorage += Decimal(constants.bytesForReveal()) + } + } + + // Check whether suggested or estimated gas / sotrage is higher and pick that + let indexToCheck = index + suggestedCompareIndex + if indexToCheck > -1 { + let op = originalRemoteOps[indexToCheck] + + if op.operationFees.gasLimit > opGas.intValue() { + opGas = Decimal(op.operationFees.gasLimit) + } + + if op.operationFees.storageLimit > opStorage.intValue() { + opStorage = Decimal(op.operationFees.storageLimit) + } + } + + + // Sum totals for later + totalGas += opGas + totalStorage += opStorage + // If last if index == operationResponse.contents.count-1 { - opFees.append( createLimitsAndTotalFeeObj(totalGas: totalGas, opGas: opGas, opCount: operationResponse.contents.count, totalStorage: totalStorage, opStorage: opStorage, forgedHash: forgedHash, constants: constants, allocationStorage: opAllocationStorage, totalAllocationFee: totalAllocationFee) ) + opFees.append( createLimitsAndTotalFeeObj(totalGas: totalGas.intValue(), + opGas: opGas.intValue(), + opCount: operationResponse.contents.count, + totalStorage: totalStorage.intValue(), + opStorage: opStorage.intValue(), + forgedHash: forgedHash, + constants: constants) ) } else { - opFees.append( createLimitsOnlyFeeObj(gas: opGas, storage: opStorage, allocationStorage: opAllocationStorage) ) + opFees.append( OperationFees(transactionFee: .zero(), gasLimit: opGas.intValue(), storageLimit: opStorage.intValue()) ) } } return opFees } - /// Create an instance of `OperationFees` for a non-last operation, with no fee, but accurate gas + storage - private func createLimitsOnlyFeeObj(gas: Int, storage: Int, allocationStorage: Int) -> OperationFees { - return OperationFees(transactionFee: .zero(), gasLimit: gas, storageLimit: storage + allocationStorage) - } - /// Create an instance of `OperationFees` in order to calculate a transaction fee. Used to calculate the overall transaction fee private func calcTransactionFee(totalGas: Int, opCount: Int, totalStorage: Int, forgedHash: String, constants: NetworkConstants) -> OperationFees { let fee = FeeEstimatorService.fee(forGasLimit: totalGas, forgedHexString: forgedHash, numberOfOperations: opCount) let burnFee = FeeEstimatorService.feeForBurn(totalStorage, withConstants: constants) - let networkFees = [OperationFees.NetworkFeeType.burnFee: burnFee, OperationFees.NetworkFeeType.allocationFee: .zero()] + let networkFees = [OperationFees.NetworkFeeType.burnFee: burnFee] return OperationFees(transactionFee: fee, networkFees: networkFees, gasLimit: 0, storageLimit: 0) } /// Create an instance of `OperationFees` for a last operation, with its corresponding gas + storage, but fees for the entire list of operations - private func createLimitsAndTotalFeeObj(totalGas: Int, opGas: Int, opCount: Int, totalStorage: Int, opStorage: Int, forgedHash: String, constants: NetworkConstants, allocationStorage: Int, totalAllocationFee: XTZAmount) -> OperationFees { + private func createLimitsAndTotalFeeObj(totalGas: Int, opGas: Int, opCount: Int, totalStorage: Int, opStorage: Int, forgedHash: String, constants: NetworkConstants) -> OperationFees { let fee = FeeEstimatorService.fee(forGasLimit: totalGas, forgedHexString: forgedHash, numberOfOperations: opCount) let burnFee = FeeEstimatorService.feeForBurn(totalStorage, withConstants: constants) - let networkFees = [OperationFees.NetworkFeeType.burnFee: burnFee, OperationFees.NetworkFeeType.allocationFee: totalAllocationFee] - - return OperationFees(transactionFee: fee, networkFees: networkFees, gasLimit: opGas, storageLimit: opStorage + allocationStorage) - } - - /// Private helper to process `OperationResponseResult` block. Complicated operations will contain many of these. - private func extractAndParseAttributes(fromResult result: OperationResponseResult?, withConstants constants: NetworkConstants) -> (consumedGas: Int, storageBytesUsed: Int, allocationFee: XTZAmount) { - guard let result = result else { - return (consumedGas: 0, storageBytesUsed: 0, allocationFee: XTZAmount.zero()) - } - - var consumedGas = Decimal(string: result.consumedMilligas ?? "0") ?? 0 - consumedGas = (consumedGas / 1000).rounded(scale: 0, roundingMode: .bankers) - let paidStorageSizeDiff = Int(result.paidStorageSizeDiff ?? "0") ?? 0 - var allocationFee = XTZAmount.zero() - - if let allocated = result.allocatedDestinationContract, allocated { - allocationFee = constants.xtzForReveal() - } + let networkFees = [OperationFees.NetworkFeeType.burnFee: burnFee] - return (consumedGas: consumedGas.intValue(), storageBytesUsed: paidStorageSizeDiff, allocationFee: allocationFee) + return OperationFees(transactionFee: fee, networkFees: networkFees, gasLimit: opGas, storageLimit: opStorage) } /// Calculate the fee to add for the given amount of gas diff --git a/Sources/KukaiCoreSwift/Services/LedgerService.swift b/Sources/KukaiCoreSwift/Services/LedgerService.swift index a60c4384..03b6fcaa 100644 --- a/Sources/KukaiCoreSwift/Services/LedgerService.swift +++ b/Sources/KukaiCoreSwift/Services/LedgerService.swift @@ -586,7 +586,7 @@ public class LedgerService: NSObject, CBPeripheralDelegate, CBCentralManagerDele let components = apdu.components(separatedBy: " ") for component in components { if component != "" { - let data = (try? Data(hexString: component)) ?? Data() + let data = Data(hexString: component) ?? Data() Logger.ledger.info("sendAPDU - writing payload") self.connectedDevice?.writeValue(data, for: writeCharacteristic, type: .withResponse) diff --git a/Sources/KukaiCoreSwift/Services/MediaProxyService.swift b/Sources/KukaiCoreSwift/Services/MediaProxyService.swift index 1adbfafa..39e024be 100644 --- a/Sources/KukaiCoreSwift/Services/MediaProxyService.swift +++ b/Sources/KukaiCoreSwift/Services/MediaProxyService.swift @@ -6,7 +6,7 @@ // import UIKit -import Kingfisher +import SDWebImage import OSLog public enum MediaProxyServiceError: String, Error { @@ -17,18 +17,44 @@ public enum MediaProxyServiceError: String, Error { public enum CacheType { case temporary case permanent + case detail } /// A service class for interacting with the TC infrastructure to proxy NFT images, videos and audio files public class MediaProxyService: NSObject { - /// Enum denoting the avaialble sizes for media + /// Enum denoting the avaialble sizes for media, in a human friendly, scale agnostic manner public enum Format: String, Codable { - case icon // 80px - case small // 300px - case medium // 600px - case gallery // 1200px - case raw // original + case icon + case small + case medium + case large + + public func rawFormat() -> RawFormat { + switch self { + case .icon: + return .mobile64 + + case .small: + return (UIScreen.main.scale == 2 ? .mobile128 : .mobile180) + + case .medium: + return (UIScreen.main.scale == 2 ? .mobile400 : .mobile600) + + case .large: + return (UIScreen.main.scale == 2 ? .mobile600 : .mobile900) + } + } + } + + /// Enum denoting the avaialble sizes for media in the specific values available on the server + public enum RawFormat: String, Codable { + case mobile64 + case mobile128 + case mobile180 + case mobile400 + case mobile600 + case mobile900 } /// Supported source types for proxied media @@ -42,7 +68,6 @@ public class MediaProxyService: NSObject { case image case audio case video - case gif // needs to be sperate from "image" because sometimes its re-encoded as a video depending on which `Format` you choose } /// Helper to parse a collection of media types to understand its contents @@ -50,19 +75,37 @@ public class MediaProxyService: NSObject { case imageOnly case audioOnly case videoOnly - case gifOnly case imageAndAudio } private var getMediaTypeCompletion: ((Result<[MediaType], KukaiError>) -> Void)? = nil private var getMediaTypeDownloadTask: URLSessionDownloadTask? = nil - private static let videoFormats = ["mp4", "mov"] + private static let videoFormats = ["mp4", "mov", "webm"] private static let audioFormats = ["mpeg", "mpg", "mp3"] - private static let imageFormats = ["png", "jpeg", "jpg", "bmp", "tif", "tiff", "svg"] // gifs might be reencoded as video, so have to exclude them - private static let customImageDownloader = ContentTypeCheckingImageDownloader(name: "custom-svg") - private static let permanentCache = ImageCache(name: "permanent") - private static let temporaryCache = ImageCache(name: "temporary") + private static let imageFormats = ["png", "jpeg", "jpg", "bmp", "tif", "tiff", "svg", "gif", "webp"] + private static let permanentCache = SDImageCache(namespace: "permanent") + private static let temporaryCache = SDImageCache(namespace: "temporary") + private static let detailCache = SDImageCache(namespace: "detail") + + private static var prefetcher: SDWebImagePrefetcher? = nil + + public static var isDarkMode = true + + + public static func setupImageLibrary() { + MediaProxyService.permanentCache.config.maxMemoryCost = UInt(100 * 1000 * 1000) // 100 MB + + MediaProxyService.temporaryCache.config.maxDiskAge = 3600 * 24 * 7 // 1 Week + MediaProxyService.temporaryCache.config.maxMemoryCost = UInt(500 * 1000 * 1000) // 500 MB + + MediaProxyService.detailCache.config.maxDiskAge = 3600 * 24 // 1 day + + MediaProxyService.prefetcher = SDWebImagePrefetcher(imageManager: SDWebImageManager(cache: MediaProxyService.temporaryCache, loader: SDImageLoadersManager())) + + SDWebImageDownloader.shared.config.downloadTimeout = 30 + SDImageCodersManager.shared.addCoder(SDImageAWebPCoder.shared) + } // MARK: - URL conversion @@ -73,12 +116,12 @@ public class MediaProxyService: NSObject { - parameter ofFormat: The requested format from the proxy - returns: An optional URL */ - public static func url(fromUriString uri: String?, ofFormat format: Format, keepGif: Bool = false) -> URL? { + public static func url(fromUriString uri: String?, ofFormat format: RawFormat, keepGif: Bool = false) -> URL? { guard let uri = uri else { return nil } - return url(fromUri: URL(string: uri), ofFormat: format, keepGif: keepGif) + return url(fromUri: URL(string: uri), ofFormat: format) } /** @@ -87,11 +130,16 @@ public class MediaProxyService: NSObject { - parameter ofFormat: The requested format from the proxy - returns: An optional URL */ - public static func url(fromUri uri: URL?, ofFormat format: Format, keepGif: Bool = false) -> URL? { + public static func url(fromUri uri: URL?, ofFormat format: RawFormat) -> URL? { guard let uri = uri, let scheme = uri.scheme, let strippedURL = uri.absoluteString.components(separatedBy: "://").last else { return nil } + // To simplify calling logic, check if its already been converted and return previous url + if uri.absoluteString.prefix(25) == "https://data.mantodev.com" { + return uri + } + let sanitizedURL = strippedURL.replacingOccurrences(of: "www.", with: "") var source = Source.ipfs @@ -106,12 +154,7 @@ public class MediaProxyService: NSObject { return nil } - if keepGif { - return URL(string: "https://media_mobile.tcinfra.net/media/\(format.rawValue)-keep-gif/\(source.rawValue)/\(sanitizedURL)") - - } else { - return URL(string: "https://static.tcinfra.net/media/\(format.rawValue)/\(source.rawValue)/\(sanitizedURL)") - } + return URL(string: "https://data.mantodev.com/media/\(format.rawValue)/\(source.rawValue)/\(sanitizedURL)") } /** @@ -119,23 +162,41 @@ public class MediaProxyService: NSObject { - parameter fromNFT: `NFT` object - returns: An optional URL */ - public static func thumbnailURL(forNFT nft: NFT, keepGif: Bool = false) -> URL? { + public static func iconURL(forNFT nft: NFT) -> URL? { if nft.metadata?.symbol == "OBJKT" { - return MediaProxyService.url(fromUri: nft.displayURI, ofFormat: .icon, keepGif: keepGif) + return MediaProxyService.url(fromUri: nft.displayURI, ofFormat: Format.icon.rawFormat()) } else { - return MediaProxyService.url(fromUri: nft.thumbnailURI ?? nft.displayURI, ofFormat: .icon, keepGif: keepGif) + return MediaProxyService.url(fromUri: nft.thumbnailURI ?? nft.displayURI, ofFormat: Format.icon.rawFormat()) } } /** - Helper method to return a standard larger display URL for a NFT + Helper method to return a standard small version of the display URL for a NFT - parameter fromNFT: `NFT` object - returns: An optional URL */ - public static func displayURL(forNFT nft: NFT, keepGif: Bool = false) -> URL? { - return MediaProxyService.url(fromUri: nft.displayURI ?? nft.artifactURI, ofFormat: .small, keepGif: keepGif) + public static func smallURL(forNFT nft: NFT) -> URL? { + return MediaProxyService.url(fromUri: nft.displayURI ?? nft.artifactURI, ofFormat: Format.small.rawFormat()) + } + + /** + Helper method to return a standard medium version of the display URL for a NFT + - parameter fromNFT: `NFT` object + - returns: An optional URL + */ + public static func mediumURL(forNFT nft: NFT) -> URL? { + return MediaProxyService.url(fromUri: nft.displayURI ?? nft.artifactURI, ofFormat: Format.medium.rawFormat()) + } + + /** + Helper method to return a standard large version of the display URL for a NFT + - parameter fromNFT: `NFT` object + - returns: An optional URL + */ + public static func largeURL(forNFT nft: NFT) -> URL? { + return MediaProxyService.url(fromUri: nft.displayURI ?? nft.artifactURI, ofFormat: Format.large.rawFormat()) } @@ -156,9 +217,6 @@ public class MediaProxyService: NSObject { } else if format.mimeType.starts(with: "audio/") { types.append(.audio) - } else if format.mimeType.lowercased() == "image/gif" || format.mimeType.lowercased() == "gif" { - types.append(.gif) - } else if format.mimeType.starts(with: "image/") || format.mimeType.starts(with: "application/") { types.append(.image) @@ -217,15 +275,12 @@ public class MediaProxyService: NSObject { if duplicatesRemoved.contains(where: { $0 == .audio }) && duplicatesRemoved.contains(where: { $0 == .image }) { return .imageAndAudio - } else if duplicatesRemoved[0] == .video { + } else if duplicatesRemoved.contains(where: { $0 == .video }) { return .videoOnly - } else if duplicatesRemoved[0] == .audio { + } else if duplicatesRemoved.contains(where: { $0 == .audio }) { return .audioOnly - } else if duplicatesRemoved[0] == .gif { - return .gifOnly - } else { return .imageOnly } @@ -233,10 +288,7 @@ public class MediaProxyService: NSObject { private static func checkFileExtension(fileExtension: String) -> MediaType? { if fileExtension != "" { - if fileExtension == "gif" { - return.gif - - } else if MediaProxyService.imageFormats.contains(fileExtension) { + if MediaProxyService.imageFormats.contains(fileExtension) { return .image } else if MediaProxyService.audioFormats.contains(fileExtension) { @@ -256,23 +308,35 @@ public class MediaProxyService: NSObject { /// Clear all images from all caches public static func removeAllImages(completion: @escaping (() -> Void)) { - MediaProxyService.temporaryCache.clearCache { - MediaProxyService.permanentCache.clearCache(completion: completion) + MediaProxyService.temporaryCache.clearMemory() + MediaProxyService.temporaryCache.clearDisk { + MediaProxyService.permanentCache.clearMemory() + MediaProxyService.permanentCache.clearDisk { + MediaProxyService.detailCache.clearMemory() + MediaProxyService.detailCache.clearDisk { + completion() + } + } } } public static func removeAllImages(fromCache: CacheType, completion: @escaping (() -> Void)) { - imageCache(forType: fromCache).clearCache(completion: completion) + let cache = imageCache(forType: fromCache) + cache.clearMemory() + cache.clearDisk { + completion() + } } /// Clear only iamges from cahce that have expired public static func clearExpiredImages() { - MediaProxyService.temporaryCache.cleanExpiredCache(completion: nil) + MediaProxyService.temporaryCache.deleteOldFiles() + MediaProxyService.detailCache.deleteOldFiles() } /// Get size in bytes public static func sizeOf(cache: CacheType) -> UInt { - return (try? imageCache(forType: cache).diskStorage.totalSize()) ?? 0 + return imageCache(forType: cache).totalDiskSize() } @@ -286,9 +350,10 @@ public class MediaProxyService: NSObject { - parameter fromCache: Which cahce to search for the image, or load it into if not found and needs to be downloaded - parameter fallback: If an error occurs and an image can't be downloaded/loaded in, display this image instead - parameter downSampleSize: Supply the dimensions you wish the image to be resized to fit + - parameter maxAnimatedImageSize: set a size limit for animated images (in bytes). If exceeded, will only load the first frame of the image - parameter completion: returns when operation finished, if successful it will return the downloaded image's CGSize */ - public static func load(url: URL?, to imageView: UIImageView, withCacheType cacheType: CacheType, fallback: UIImage, downSampleSize: CGSize? = nil, completion: ((CGSize?) -> Void)? = nil) { + public static func load(url: URL?, to imageView: UIImageView, withCacheType cacheType: CacheType, fallback: UIImage, downSampleSize: CGSize? = nil, maxAnimatedImageSize: UInt? = nil, completion: ((CGSize?) -> Void)? = nil) { guard let url = url else { imageView.image = fallback if let comp = completion { comp(nil) } @@ -299,41 +364,49 @@ public class MediaProxyService: NSObject { // Don't donwload real images during unit tests. Investigate mocking kingfisher if Thread.current.isRunningXCTest { return } - var processors: [KingfisherOptionsInfoItem] = [.downloader(MediaProxyService.customImageDownloader)] - if let downsample = downSampleSize { - processors.append(.processor(DownsamplingImageProcessor(size: downsample))) - } else { - processors.append(.processor(DefaultImageProcessor.default)) + var context: [SDWebImageContextOption: Any] = [:] + if let downSampleSize = downSampleSize { + context[.imageTransformer] = SDImageResizingTransformer(size: downSampleSize, scaleMode: .fill) } - if cacheType == .temporary { - processors.append(contentsOf: [.targetCache(MediaProxyService.temporaryCache), .diskCacheExpiration(.days(7))]) - - } else { - processors.append(.targetCache(MediaProxyService.permanentCache)) - } + context[.imageCache] = imageCache(forType: cacheType) + + imageView.sd_imageIndicator = (isDarkMode) ? SDWebImageActivityIndicator.white : SDWebImageActivityIndicator.gray - imageView.kf.indicatorType = .activity - imageView.kf.setImage(with: url, options: processors) { result in - guard let res = try? result.get() else { - Logger.kukaiCoreSwift.error("Error fetching: \(url.absoluteString), Error: \(String(describing: try? result.getError()))") + // Set the image, but avoid auto setting it, so we can run some checks first, e.g. check if the animated image is too massive + imageView.sd_setImage(with: url, placeholderImage: nil, options: [.avoidAutoSetImage, .retryFailed], context: context) { _, _, _ in + + } completed: { image, error, _, _ in + if let _ = error { + Logger.kukaiCoreSwift.error("Error fetching: \(url.absoluteString), Error: \(String(describing: error))") imageView.image = fallback - if let comp = completion { comp(nil) } + completion?(nil) return } - if let completion = completion { - completion(res.image.size) + + if (image?.images?.count ?? 0) > 0, let maxMemory = maxAnimatedImageSize, (image?.sd_memoryCost ?? 0) > maxMemory { + imageView.image = image?.images?.first + + } else { + imageView.image = image } + + completion?(image?.size) } } - public static func imageCache(forType: CacheType) -> ImageCache { - if forType == .temporary { - return MediaProxyService.temporaryCache - } else { - return MediaProxyService.permanentCache + public static func imageCache(forType: CacheType) -> SDImageCache { + switch forType { + case .temporary: + return MediaProxyService.temporaryCache + + case .permanent: + return MediaProxyService.permanentCache + + case .detail: + return MediaProxyService.detailCache } } @@ -352,24 +425,18 @@ public class MediaProxyService: NSObject { // Don't donwload real images during unit tests. Investigate mocking kingfisher if Thread.current.isRunningXCTest { return } - MediaProxyService.customImageDownloader.downloadImage(with: url) { result in - switch result { - case .success(let value): - var options: [KingfisherOptionsInfoItem] = [] - - if cacheType == .temporary { - options = [.diskCacheExpiration(.days(7))] - } - - imageCache(forType: cacheType).store(value.image, forKey: url.absoluteString, options: KingfisherParsedOptionsInfo(options)) { _ in - completion(value.image.size) - } - - case .failure(let error): - Logger.kukaiCoreSwift.error("Error downloading + caching image: \(error)") - completion(nil) + var context: [SDWebImageContextOption: Any] = [:] + context[SDWebImageContextOption.animatedImageClass] = SDAnimatedImage.self + + MediaProxyService.prefetcher?.prefetchURLs([url], context: context, progress: nil, completed: { finishedURLs, skippedURLs in + let size = MediaProxyService.temporaryCache.imageFromCache(forKey: url.absoluteString)?.size + + if skippedURLs > 0 { + Logger.kukaiCoreSwift.error("Error downloading + caching image") } - } + + completion(size) + }) } /// Check if a given url is already cached @@ -378,32 +445,20 @@ public class MediaProxyService: NSObject { return false } - let identifier = DefaultImageProcessor.default.identifier - return imageCache(forType: cacheType).isCached(forKey: url.absoluteString, processorIdentifier: identifier) + return imageCache(forType: cacheType).diskImageDataExists(withKey: url.absoluteString) } /** Check if an image is cached, and return its size if so. Useful for preparing table/collection view - parameter url: Media proxy URL pointing to an image - parameter fromCache: Which cahce to search for the image, or load it into if not found and needs to be downloaded - - parameter completion: returns when operation finished, if successful it will return the downloaded image's CGSize */ - public static func sizeForImageIfCached(url: URL?, cacheType: CacheType = .temporary, completion: @escaping ((CGSize?) -> Void) ) { + public static func sizeForImageIfCached(url: URL?, cacheType: CacheType = .temporary) -> CGSize? { guard let url = url else { - completion(nil) - return + return nil } - imageCache(forType: cacheType).retrieveImage(forKey: url.absoluteString) { result in - switch result { - case .success(let value): - completion(value.image?.size) - - case .failure(let error): - Logger.kukaiCoreSwift.error("Error fetching from cache: \(error)") - completion(nil) - } - } + return imageCache(forType: cacheType).imageFromCache(forKey: url.absoluteString)?.size } } @@ -451,66 +506,3 @@ extension MediaProxyService: URLSessionDownloadDelegate { } } } - -public class ContentTypeCheckingImageDownloader: ImageDownloader { - - public override func startDownloadTask(context: DownloadingContext, callback: SessionDataTask.TaskCallback) -> DownloadTask { - - let downloadTask = addDownloadTask(context: context, callback: callback) - - let sessionTask = downloadTask.sessionTask - guard !sessionTask.started else { - return downloadTask - } - - sessionTask.onTaskDone.delegate(on: self) { (self, done) in - // Underlying downloading finishes. - // result: Result<(Data, URLResponse?)>, callbacks: [TaskCallback] - let (result, callbacks) = done - - // Before processing the downloaded data. - self.reportDidDownloadImageData(result: result, url: context.url) - - switch result { - - // Download finished. Now process the data to an image. - case .success(let (data, response)): - - let processor = ImageDataProcessor(data: data, callbacks: callbacks, processingQueue: context.options.processingQueue) - - // If we are downloading an SVG, replace DefaultImageProcessor with SVGImgProcessor - if let httpResponse = response as? HTTPURLResponse, let contentType = httpResponse.value(forHTTPHeaderField: "Content-Type"), contentType.contains("svg") { - for (index, callback) in processor.callbacks.enumerated() { - if callback.options.processor.identifier == DefaultImageProcessor.default.identifier { - processor.callbacks[index].options.processor = SVGImgProcessor() - } - } - } - - processor.onImageProcessed.delegate(on: self) { (self, done) in - // `onImageProcessed` will be called for `callbacks.count` times, with each - // `SessionDataTask.TaskCallback` as the input parameter. - // result: Result, callback: SessionDataTask.TaskCallback - let (result, callback) = done - - self.reportDidProcessImage(result: result, url: context.url, response: response) - - let imageResult = result.map { ImageLoadingResult(image: $0, url: context.url, originalData: data) } - let queue = callback.options.callbackQueue - queue.execute { callback.onCompleted?.call(imageResult) } - } - processor.process() - - case .failure(let error): - callbacks.forEach { callback in - let queue = callback.options.callbackQueue - queue.execute { callback.onCompleted?.call(.failure(error)) } - } - } - } - - reportWillDownloadImage(url: context.url, request: context.request) - sessionTask.resume() - return downloadTask - } -} diff --git a/Sources/KukaiCoreSwift/Services/NetworkService.swift b/Sources/KukaiCoreSwift/Services/NetworkService.swift index ba3dc2cc..3fabf405 100644 --- a/Sources/KukaiCoreSwift/Services/NetworkService.swift +++ b/Sources/KukaiCoreSwift/Services/NetworkService.swift @@ -53,14 +53,45 @@ public class NetworkService { /** A generic send function that takes an RPC, with a generic type conforming to `Decodable`, executes the request and returns the result. - parameter rpc: A instance of `RPC`. - - parameter withBaseURL: The base URL needed. This will typically come from `TezosNodeConfig`. + - parameter withNodeURLs: An array of nodeURLs from `TezosNodeConfig`. + - parameter retryCount: An Int denoting the current number of attempts made. 3 is max. - parameter completion: A completion callback that will be executed on the main thread. - returns: Void */ - public func send(rpc: RPC, withBaseURL baseURL: URL, completion: @escaping ((Result) -> Void)) { - let fullURL = baseURL.appendingPathComponent(rpc.endpoint) + public func send(rpc: RPC, withNodeURLs nodeURLs: [URL], retryCount: Int = 0, completion: @escaping ((Result) -> Void)) { + var serverString = nodeURLs[retryCount].absoluteString - self.request(url: fullURL, isPOST: rpc.isPost, withBody: rpc.payload, forReturnType: T.self, completion: completion) + if serverString.suffix(1) != "/" { + serverString.append("/") + } + + // Avoid using 'appendPathComponent' as it will percent encode '?' if included in RPC url. This causes some servers issues + guard let fullURL = URL(string: "\(serverString)\(rpc.endpoint)") else { + completion(Result.failure(KukaiError.internalApplicationError(error: NetworkError.invalidURL))) + return + } + + + self.request(url: fullURL, isPOST: rpc.isPost, withBody: rpc.payload, forReturnType: T.self) { [weak self] result in + guard let _ = try? result.get() else { + + // if request failed on first attempt, we have more urls, and the error was a HTTP error. The retry with another URL + // else return the error + let failure = result.getFailure() + let isRPCError = failure.errorType == .rpc + let isHttpError = (failure.httpStatusCode ?? 0) >= 300 + if retryCount < nodeURLs.count-1, retryCount <= 3, (isRPCError || isHttpError) { + self?.send(rpc: rpc, withNodeURLs: nodeURLs, retryCount: (retryCount + 1), completion: completion) + + } else { + completion(result) + } + + return + } + + completion(result) + } } /** @@ -195,7 +226,7 @@ public class NetworkService { operations = asOperations } - var error = ErrorHandlingService.searchOperationResponseForErrors(operations) + var error = ErrorHandlingService.searchOperationResponseForErrors(operations, requestURL: withRequestURL) error?.addNetworkData(requestURL: withRequestURL, requestJSON: requestPayload, responseJSON: responsePayload, httpStatusCode: httpStatusCode) return error diff --git a/Sources/KukaiCoreSwift/Services/OfflineConstants.swift b/Sources/KukaiCoreSwift/Services/OfflineConstants.swift deleted file mode 100644 index 7cdbdbe8..00000000 --- a/Sources/KukaiCoreSwift/Services/OfflineConstants.swift +++ /dev/null @@ -1,171 +0,0 @@ -// -// OfflineConstants.swift -// -// -// Created by Simon Mcloughlin on 13/08/2021. -// - -import Foundation - -public enum DAppCategory { - case marketplace - case exchange - case collectible -} - -public enum DAppAccessType { - case all - case directAuthOnly - case none -} - -public struct DApp { - let name: String - let symbol: String - let parentContractAddress: [String] - let thumbnailURL: URL? - let website: URL? - let category: DAppCategory? - let accessType: DAppAccessType -} - -public struct OfflineConstants { - - static let dApps: [String: [DApp]] = [ - NetworkVersion.chainName_mainnet: [ - DApp( - name: "Hic et Nunc (HEN)", - symbol: "hen", - parentContractAddress: ["KT1AFA2mwNUMNd4SsujE1YYp29vd8BZejyKW", "KT1RJ6PbjHpwc3M5rw5s2Nbmefwbuwbdxton", "KT1M2JnD1wsg7w2B4UXJXtKQPuDUpU2L7cJH"], - thumbnailURL: URL(string: "https://dashboard-assets.dappradar.com/document/7357/hicetnunc-dapp-marketplaces-tezos-logo-166x166_88a66b54787c555ea5237fa002586ae5.png")!, - website: URL(string: "https://www.hicetnunc.xyz/")!, - category: .marketplace, - accessType: .all - ), - DApp( - name: "QuipuSwap", - symbol: "", - parentContractAddress: [], - thumbnailURL: URL(string: "https://dashboard-assets.dappradar.com/document/7360/quipuswap-dapp-exchanges-tezos-logo-166x166_f8f472a49e3f3d6b591a13dbd979a857.png")!, - website: URL(string: "https://quipuswap.com/")!, - category: .exchange, - accessType: .all - ), - DApp( - name: "Minterpop", - symbol: "", - parentContractAddress: ["KT1AaaBSo5AE6Eo8fpEN5xhCD4w3kHStafxk"], - thumbnailURL: URL(string: "https://minterpop.com/_next/static/images/logo-ac73543744326030947adf91a3dad06c.svg")!, - website: URL(string: "https://minterpop.com/")!, - category: .collectible, - accessType: .directAuthOnly - ), - DApp( - name: "Kalamint", - symbol: "", - parentContractAddress: ["KT1EpGgjQs73QfFJs9z7m1Mxm5MTnpC2tqse"], - thumbnailURL: URL(string: "https://dashboard-assets.dappradar.com/document/7358/kalamint-dapp-marketplaces-tezos-logo-166x166_3157752c764b72d1e7759b1b005b07d7.png")!, - website: URL(string: "https://kalamint.io/")!, - category: .marketplace, - accessType: .all - ), - DApp( - name: "Interpop Comics", - symbol: "InterpopComics", - parentContractAddress: ["KT1UxMVVrK2pbYYEtwes1zKYdpYnzoZ6yPKC"], - thumbnailURL: URL(string: "https://dev.interpopcomics.com/interpop_logo.png")!, - website: URL(string: "https://interpopcomics.com/")!, - category: .collectible, - accessType: .directAuthOnly - ), - DApp( - name: "Bazaar Market", - symbol: "", - parentContractAddress: ["KT1PKvHNWuWDNVDtqjDha4AostLrGDu4G1jy"], - thumbnailURL: URL(string: "https://dashboard-assets.dappradar.com/document/7444/bazaarmarket-dapp-marketplaces-tezos-logo-166x166_eeff309690a4abe4d06e78922012d985.png")!, - website: URL(string: "https://bazaarnft.xyz/")!, - category: .marketplace, - accessType: .all - ), - DApp( - name: "TzColors", - symbol: "", - parentContractAddress: ["KT1FyaDqiMQWg7Exo7VUiXAgZbd2kCzo3d4s"], - thumbnailURL: URL(string: "https://dashboard-assets.dappradar.com/document/7361/tzcolors-dapp-marketplaces-tezos-logo-166x166_4731835687c8ad06edf1d8c140905e12.png")!, - website: URL(string: "https://www.tzcolors.io/")!, - category: .collectible, - accessType: .all - ), - DApp( - name: "PixelPotus", - symbol: "PixelPotus", - parentContractAddress: ["KT1WGDVRnff4rmGzJUbdCRAJBmYt12BrPzdD"], - thumbnailURL: URL(string: "https://www.pixelpotus.com/img/eagle-right.d1840b0b.png")!, - website: URL(string: "https://www.pixelpotus.com/")!, - category: .collectible, - accessType: .all - ), - DApp( - name: "SalsaDao Tacoshop & Casino", - symbol: "SalsaDaoTacoshop", - parentContractAddress: ["KT1UmxSSUQ5716tRa2RLNSAkiSG6TWbzZ7GL", "KT1JYWuC4eWqYkNC1Sh6BiD89vZzytVoV2Ae", "KT1NvPaecvj8g7SbDs8E5s2jxbEBKHxZssP1", "KT1LhNu3v6rCa3Ura3bompAAJZD9io5VRaWZ", "KT1VHd7ysjnvxEzwtjBAmYAmasvVCfPpSkiG"], - thumbnailURL: URL(string: "https://dashboard-assets.dappradar.com/document/7837/salsadao-dapp-other-tezos-logo-166x166_d4625f93b4fa3858c32b15b36c99617e.png")!, - website: URL(string: "https://tezostaco.shop/#/")!, - category: .collectible, - accessType: .none - ), - DApp( - name: "Truesy", - symbol: "", - parentContractAddress: ["KT197APGtQ8mk2svRSpDkqXLzHedRtkJ7Hjr", "KT1CTqQ4vg2zyG1AQmDLVeJ473ueoy2Rw8t1", "KT1QE4nZiAXbpuDCu4P5QTNibQSx6FFW3y2W", "KT1QbzLyzwXB9JTevvjT3B24BzgWfMzFfBHt"], - thumbnailURL: URL(string: "https://wallet.kukai.app/assets/img/spinner/truesy.svg")!, - website: nil, - category: nil, - accessType: .none - ), - DApp( - name: "NBA", - symbol: "", - parentContractAddress: ["KT1LqKWDtzUh4CXNqfJQMcATv4PdZxBjPJjH"], - thumbnailURL: nil, - website: nil, - category: nil, - accessType: .none - ), - DApp( - name: "BUA", - symbol: "", - parentContractAddress: ["KT1WN9yWqV9pEm1ANR56ExJZbnVukWN31fTY", "KT1WBXFKW1sozV7ZLBHvw5eks6Pb8KSoVmLq", "KT1KWNNBtb7z8pejNUNigaRWSTkTQL4DEcf8", "KT1D6CNSXcftRTArCF73Jpsh95dwgEwAy6qZ", "KT1R87j2qFxtPZE3EmmeSoubg2mZkk3j4X8y", "KT1HRCc359qXshgMpBygY3VwqTnV7fc7nYfp", "KT1MU8Pb9DFjnVpEULyWDrqPLjedZPNHFrEN", "KT1FPfsRVWVju2mH1r2iFg5jfzWj7RDCb6ia", "KT19AqSn4m3NtvztPXuETjCzoQ75bKDd1Pyi", "KT1PcYxsFmXuoxcJpcfRSCcQQeSDLERSMzsW", "KT1KSYCk8zjdhgzDDRsmb2ygAfanjBx25Wto"], - thumbnailURL: nil, - website: nil, - category: nil, - accessType: .none - ), - DApp( - name: "OpenMinter", - symbol: "", - parentContractAddress: ["KT1QcxwB4QyPKfmSwjH1VRxa6kquUjeDWeEy"], - thumbnailURL: URL(string: "https://openminter.com/static/media/header-logo.a9dd48a8.svg")!, - website: nil, - category: nil, - accessType: .none - ) - ] - ] - - static func dappDisplayName(forContractAddress address: String, onChain chain: String) -> (name: String, thumbnail: URL?) { - guard let networkList = dApps[chain] else { - return (name: address, thumbnail: nil) - } - - for dapp in networkList { - for contract in dapp.parentContractAddress { - if contract == address { - return (name: dapp.name, thumbnail: dapp.thumbnailURL) - } - } - } - - return (name: address, thumbnail: nil) - } -} diff --git a/Sources/KukaiCoreSwift/Services/OperationService.swift b/Sources/KukaiCoreSwift/Services/OperationService.swift index 09d7949a..0f827b88 100644 --- a/Sources/KukaiCoreSwift/Services/OperationService.swift +++ b/Sources/KukaiCoreSwift/Services/OperationService.swift @@ -202,7 +202,7 @@ public class OperationService { return } - self.networkService.send(rpc: rpc, withBaseURL: config.primaryNodeURL) { (result) in + self.networkService.send(rpc: rpc, withNodeURLs: config.nodeURLs) { (result) in switch result { case .success(let string): completion(Result.success(string)) @@ -222,12 +222,6 @@ public class OperationService { - parameter completion: callback which just returns success or failure with an error. */ public func remoteParse(forgeResult: Result, operationMetadata: OperationMetadata, operationPayload: OperationPayload, completion: @escaping ((Result) -> Void)) { - guard let parseURL = config.parseNodeURL else { - completion(Result.failure(KukaiError.internalApplicationError(error: OperationServiceError.noRemoteParseURLFound))) - return - } - - // Handle the forge result first to check there are no errors var remoteForgedHash = "" @@ -248,7 +242,7 @@ public class OperationService { return } - self.networkService.send(rpc: rpc, withBaseURL: parseURL) { (result) in + self.networkService.send(rpc: rpc, withNodeURLs: config.nodeURLs.reversed()) { (result) in switch result { case .success(let parsedPayload): @@ -279,7 +273,7 @@ public class OperationService { return } - self.networkService.send(rpc: rpc, withBaseURL: config.primaryNodeURL) { (result) in + self.networkService.send(rpc: rpc, withNodeURLs: config.nodeURLs) { (result) in switch result { case .success(let operationResponse): completion(Result.success(operationResponse)) @@ -326,7 +320,7 @@ public class OperationService { return } - self.networkService.send(rpc: rpc, withBaseURL: config.primaryNodeURL) { (result) in + self.networkService.send(rpc: rpc, withNodeURLs: config.nodeURLs) { (result) in completion(result) } } diff --git a/Sources/KukaiCoreSwift/Services/TorusAuthService.swift b/Sources/KukaiCoreSwift/Services/TorusAuthService.swift index 30de2a31..9704d11f 100644 --- a/Sources/KukaiCoreSwift/Services/TorusAuthService.swift +++ b/Sources/KukaiCoreSwift/Services/TorusAuthService.swift @@ -31,6 +31,7 @@ public enum TorusAuthProvider: String, Codable { case twitch case line case github + case email } /// SDK requires information about the verifer that can't be stored inside the verifier, add a wrapper object to allow passing of all the data @@ -39,6 +40,9 @@ public struct SubverifierWrapper { /// The name of the aggregated verifier public let aggregateVerifierName: String? + /// The type to use + public let verifierType: verifierTypes + /// Unlike seed based wallets, Torus verifiers are bound to a network and generate different addresses. In order to give the same experience on Tezos, we need to supply the network for each verifier public let networkType: TezosNodeClientConfig.NetworkType @@ -53,8 +57,9 @@ public struct SubverifierWrapper { } /// Create an instance of the object with an option string for the aggregate verifier name, and a `SubVerifierDetails` object - public init(aggregateVerifierName: String?, networkType: TezosNodeClientConfig.NetworkType, subverifier: SubVerifierDetails) { + public init(aggregateVerifierName: String?, verifierType: verifierTypes, networkType: TezosNodeClientConfig.NetworkType, subverifier: SubVerifierDetails) { self.aggregateVerifierName = aggregateVerifierName + self.verifierType = verifierType self.networkType = networkType self.subverifier = subverifier } @@ -97,16 +102,13 @@ public class TorusAuthService: NSObject { private let mainnetProxyAddress = "0x638646503746d5456209e33a2ff5e3226d698bea" /// Shared instance of the Torus SDK object, with a temprary init - private var torus = CustomAuth(aggregateVerifierType: .singleLogin, aggregateVerifier: "", subVerifierDetails: []) + private var torus = CustomAuth(web3AuthClientId: "", aggregateVerifierType: .singleLogin, aggregateVerifier: "", subVerifierDetails: [], network: .legacy(.MAINNET)) /// Shared instance of the Torus Util object private let torusUtils: TorusUtils /// Shared instance of the Torus object used for fetching details about the Ethereum node, in order to query it for public tz2 addresses - private var fetchNodeDetails: FetchNodeDetails - - /// Stored copy of the Torus NodeDetails object. The fetching of this is forced onto the main thread, blocking the UI. Need to push it onto a background thread and store it for other code to access - private var nodeDetails: AllNodeDetailsModel? = nil + private var fetchNodeDetails: NodeDetailManager /// Apple sign in requires a seperate workflow to rest of torus, need to grab the completion and hold onto it for later private var createWalletCompletion: ((Result) -> Void) = {_ in} @@ -114,6 +116,7 @@ public class TorusAuthService: NSObject { private let appleIDProvider = ASAuthorizationAppleIDProvider() private var request: ASAuthorizationAppleIDRequest? = nil private var authorizationController: ASAuthorizationController? = nil + private let web3AuthClientId: String @@ -124,12 +127,13 @@ public class TorusAuthService: NSObject { - parameter networkService: A networking service instance used for converting twitter handles into twitter id's - parameter verifiers: List of verifiers available to the library for the given app context */ - public init(networkService: NetworkService, verifiers: [TorusAuthProvider: SubverifierWrapper]) { + public init(networkService: NetworkService, verifiers: [TorusAuthProvider: SubverifierWrapper], web3AuthClientId: String) { self.networkService = networkService self.verifiers = verifiers + self.web3AuthClientId = web3AuthClientId - self.fetchNodeDetails = CASDKFactory().createFetchNodeDetails(network: .MAINNET, urlSession: networkService.urlSession) - self.torusUtils = TorusUtils(loglevel: .error, urlSession: networkService.urlSession) + self.fetchNodeDetails = NodeDetailManager(network: .legacy(.MAINNET), urlSession: networkService.urlSession) + self.torusUtils = TorusUtils(loglevel: .error, urlSession: networkService.urlSession, network: .legacy(.MAINNET), clientId: web3AuthClientId) } @@ -152,24 +156,17 @@ public class TorusAuthService: NSObject { if let mockTorus = mockedTorus { torus = mockTorus - } else if verifierWrapper.isAggregate { - torus = CustomAuth(aggregateVerifierType: .singleIdVerifier, - aggregateVerifier: verifierWrapper.aggregateVerifierName ?? "", - subVerifierDetails: [verifierWrapper.subverifier], - network: verifierWrapper.networkType == .testnet ? .TESTNET : .MAINNET, - loglevel: .error, - urlSession: self.networkService.urlSession, - networkUrl: verifierWrapper.networkType == .testnet ? "https://rpc.ankr.com/eth_ropsten" : nil) - } else { - torus = CustomAuth(aggregateVerifierType: .singleLogin, - aggregateVerifier: verifierWrapper.subverifier.clientId, + torus = CustomAuth(web3AuthClientId: web3AuthClientId, + aggregateVerifierType: verifierWrapper.verifierType, + aggregateVerifier: verifierWrapper.aggregateVerifierName ?? verifierWrapper.subverifier.verifier, subVerifierDetails: [verifierWrapper.subverifier], - network: verifierWrapper.networkType == .testnet ? .TESTNET : .MAINNET, + network: verifierWrapper.networkType == .testnet ? .legacy(.TESTNET) : .legacy(.MAINNET), loglevel: .error, urlSession: self.networkService.urlSession, - networkUrl: verifierWrapper.networkType == .testnet ? "https://rpc.ankr.com/eth_ropsten" : nil) + networkUrl: verifierWrapper.networkType == .testnet ? "https://www.ankr.com/rpc/eth/eth_goerli" : nil) } + // If requesting a wallet from apple, call apple sign in code and skip rest of function @@ -210,46 +207,66 @@ public class TorusAuthService: NSObject { // Each serach returns required data in a different format. Grab the private key and social profile info needed switch authType { case .apple, .google: - if let userInfoDict = data["userInfo"] as? [String: Any] { - username = userInfoDict["name"] as? String - userId = userInfoDict["email"] as? String - profile = userInfoDict["picture"] as? String + if let userInfo = data.userInfo["userInfo"] as? [String: Any] { + username = userInfo["name"] as? String + userId = userInfo["email"] as? String + profile = userInfo["picture"] as? String } - pk = data["privateKey"] as? String + pk = data.torusKey.finalKeyData?.privKey case .twitter: - if let userInfoDict = data["userInfo"] as? [String: Any] { - username = userInfoDict["nickname"] as? String - userId = userInfoDict["sub"] as? String - profile = userInfoDict["picture"] as? String + if let userInfo = data.userInfo["userInfo"] as? [String: Any] { + username = userInfo["nickname"] as? String + userId = userInfo["sub"] as? String + profile = userInfo["picture"] as? String } - pk = data["privateKey"] as? String + pk = data.torusKey.finalKeyData?.privKey case .reddit: - if let userInfoDict = data["userInfo"] as? [String: Any] { - username = userInfoDict["name"] as? String + if let userInfo = data.userInfo["userInfo"] as? [String: Any] { + username = userInfo["name"] as? String userId = nil - profile = userInfoDict["icon_img"] as? String + profile = userInfo["icon_img"] as? String } - pk = data["privateKey"] as? String + pk = data.torusKey.finalKeyData?.privKey case .facebook: - print("\n\n\n Unimplemented \nFacebook data: \(data) \n\n\n") - completion(Result.failure(KukaiError.internalApplicationError(error: TorusAuthError.invalidTorusResponse))) + if let userInfo = data.userInfo["userInfo"] as? [String: Any] { + username = userInfo["name"] as? String + userId = userInfo["id"] as? String + profile = ((userInfo["picture"] as? [String: Any])?["data"] as? [String: Any])?["url"] as? String + } + pk = data.torusKey.finalKeyData?.privKey + + case .email: + if let userInfo = data.userInfo["userInfo"] as? [String: Any] { + username = userInfo["email"] as? String + userId = userInfo["email"] as? String + profile = userInfo["picture"] as? String + } + pk = data.torusKey.finalKeyData?.privKey default: completion(Result.failure(KukaiError.internalApplicationError(error: TorusAuthError.missingVerifier))) } - // Create wallet with details and return - guard let privateKeyString = pk, let wallet = TorusWallet(authProvider: authType, username: username, userId: userId, profilePicture: profile, torusPrivateKey: privateKeyString) else { - Logger.torus.error("Error torus contained no, or invlaid private key") - completion(Result.failure(KukaiError.internalApplicationError(error: TorusAuthError.invalidTorusResponse))) - return + // Twitter API doesn't give us the bloody "@" handle for some reason. Fetch that first and overwrite the username property with the handle, if found + if authType == .twitter { + twitterHandleLookup(id: userId ?? "") { [weak self] result in + switch result { + case .success(let actualUsername): + self?.createTorusWalletAndContinue(pk: pk, authType: authType, username: actualUsername, userId: userId, profile: profile, completion: completion) + + case .failure(_): + self?.createTorusWalletAndContinue(pk: pk, authType: authType, username: username, userId: userId, profile: profile, completion: completion) + } + } + + } else { + createTorusWalletAndContinue(pk: pk, authType: authType, username: username, userId: userId, profile: profile, completion: completion) } - completion(Result.success(wallet)) } catch { Logger.torus.error("Error logging in: \(error)") completion(Result.failure(KukaiError.internalApplicationError(error: error))) @@ -258,6 +275,15 @@ public class TorusAuthService: NSObject { } } + private func createTorusWalletAndContinue(pk: String?, authType: TorusAuthProvider, username: String?, userId: String?, profile: String?, completion: @escaping ((Result) -> Void)) { + guard let privateKeyString = pk, let wallet = TorusWallet(authProvider: authType, username: username, userId: userId, profilePicture: profile, torusPrivateKey: privateKeyString) else { + Logger.torus.error("Error torus contained no, or invlaid private key") + completion(Result.failure(KukaiError.internalApplicationError(error: TorusAuthError.invalidTorusResponse))) + return + } + + completion(Result.success(wallet)) + } @@ -275,7 +301,7 @@ public class TorusAuthService: NSObject { } if authType == .twitter { - twitterLookup(username: socialUsername) { [weak self] twitterResult in + twitterAddressLookup(username: socialUsername) { [weak self] twitterResult in switch twitterResult { case .success(let twitterUserId): self?.getPublicAddress(verifierName: verifierWrapper.aggregateVerifierName ?? verifierWrapper.subverifier.clientId, verifierWrapper: verifierWrapper, socialUserId: "twitter|\(twitterUserId)", completion: completion) @@ -291,27 +317,22 @@ public class TorusAuthService: NSObject { /// Private wrapper to avoid duplication in the previous function private func getPublicAddress(verifierName: String, verifierWrapper: SubverifierWrapper, socialUserId: String, completion: @escaping ((Result) -> Void)) { - let isTestnet = (verifierWrapper.networkType == .testnet) - self.fetchNodeDetails = CASDKFactory().createFetchNodeDetails(network: (isTestnet ? .TESTNET : .MAINNET), urlSession: networkService.urlSession, networkUrl: (isTestnet ? "https://rpc.ankr.com/eth_ropsten" : nil)) + self.fetchNodeDetails = NodeDetailManager(network: (isTestnet ? .legacy(.TESTNET) : .legacy(.MAINNET)), urlSession: networkService.urlSession) - Task { @MainActor in + Task { do { let remoteNodeDetails = try await self.fetchNodeDetails.getNodeDetails(verifier: verifierName, verifierID: socialUserId) - self.nodeDetails = remoteNodeDetails + let data = try await self.torusUtils.getPublicAddress(endpoints: remoteNodeDetails.getTorusNodeEndpoints(), torusNodePubs: remoteNodeDetails.getTorusNodePub(), verifier: verifierName, verifierId: socialUserId) + let pubX = data.finalKeyData?.X.padLeft(toLength: 64, withPad: "0") + let pubY = data.finalKeyData?.Y.padLeft(toLength: 64, withPad: "0") - guard let nd = self.nodeDetails else { - completion(Result.failure(KukaiError.internalApplicationError(error: TorusAuthError.invalidNodeDetails))) - return - } - - let data = try await self.torusUtils.getPublicAddress(endpoints: nd.getTorusNodeEndpoints(), torusNodePubs: nd.getTorusNodePub(), verifier: verifierName, verifierId: socialUserId, isExtended: true) - guard let pubX = data.x, - let pubY = data.y, - let bytesX = Sodium.shared.utils.hex2bin(pubX), - let bytesY = Sodium.shared.utils.hex2bin(pubY) else { + guard let x = pubX, + let y = pubY, + let bytesX = Sodium.shared.utils.hex2bin(x), + let bytesY = Sodium.shared.utils.hex2bin(y) else { Logger.torus.error("Finding address - no valid pub key x and y returned") - completion(Result.failure(KukaiError.internalApplicationError(error: TorusAuthError.invalidTorusResponse))) + DispatchQueue.main.async { completion(Result.failure(KukaiError.internalApplicationError(error: TorusAuthError.invalidTorusResponse))) } return } @@ -327,36 +348,61 @@ public class TorusAuthService: NSObject { // Run Blake2b hashing on public key guard let hash = Sodium.shared.genericHash.hash(message: publicKey, outputLength: 20) else { Logger.torus.error("Finding address - generating hash failed") - completion(Result.failure(KukaiError.internalApplicationError(error: TorusAuthError.cryptoError))) + DispatchQueue.main.async { completion(Result.failure(KukaiError.internalApplicationError(error: TorusAuthError.cryptoError))) } return } // Create tz2 address and return let tz2Address = Base58Check.encode(message: hash, prefix: Prefix.Address.tz2) - completion(Result.success(tz2Address)) + DispatchQueue.main.async { completion(Result.success(tz2Address)) } } catch { Logger.torus.error("Error logging in: \(error)") - completion(Result.failure(KukaiError.internalApplicationError(error: error))) + DispatchQueue.main.async { completion(Result.failure(KukaiError.internalApplicationError(error: error))) } return } } } + /** + Take in a Twitter id and fetch the Twitter username instead. + - parameter id: The users ID. Can contain a prefix of "twitter|" or not + - parameter completion: The callback fired when the username has been found + */ + public func twitterHandleLookup(id: String, completion: @escaping ((Result) -> Void)) { + guard let url = URL(string: "https://backend.kukai.network/twitter-lookup") else { + completion(Result.failure(KukaiError.unknown(withString: "Unable to setup request to kukai twitter service"))) + return + } + let sanitisedId = id.replacingOccurrences(of: "twitter|", with: "") + let data = "{ \"id\": \"\(sanitisedId)\"}".data(using: .utf8) + networkService.request(url: url, isPOST: true, withBody: data, forReturnType: [String: String].self) { result in + switch result { + case .success(let dict): + if let username = dict["username"] { + completion(Result.success("@\(username)")) + } else { + completion(Result.failure(KukaiError.internalApplicationError(error: TorusAuthError.noTwiiterUserIdFound))) + } + + case .failure(let error): + completion(Result.failure(error)) + } + } + } /** - Take in a Twitter username and fetch the Twitter userId instead. - - parameter username: The users username. Can contain an `@` symbol, but will be stripped out by the code as its not required - - parameter completion: The callback fired when the userId has been found - */ - public func twitterLookup(username: String, completion: @escaping ((Result) -> Void)) { - let sanitizedUsername = username.replacingOccurrences(of: "@", with: "") - - guard let url = URL(string: "https://api.tezos.help/twitter-lookup/") else { + Take in a Twitter username and fetch the Twitter userId instead. + - parameter username: The users username. Can contain an `@` symbol, but will be stripped out by the code as its not required + - parameter completion: The callback fired when the userId has been found + */ + public func twitterAddressLookup(username: String, completion: @escaping ((Result) -> Void)) { + guard let url = URL(string: "https://backend.kukai.network/twitter-lookup") else { completion(Result.failure(KukaiError.internalApplicationError(error: TorusAuthError.invalidTwitterURL))) return } + let sanitizedUsername = username.replacingOccurrences(of: "@", with: "") let data = "{\"username\": \"\(sanitizedUsername)\"}".data(using: .utf8) networkService.request(url: url, isPOST: true, withBody: data, forReturnType: [String: String].self) { result in switch result { @@ -407,18 +453,20 @@ extension TorusAuthService: ASAuthorizationControllerDelegate, ASAuthorizationCo let claim = JWT.claim(name: "sub") let sub = claim.string ?? "" - let tdsdk = CustomAuth(aggregateVerifierType: .singleIdVerifier, - aggregateVerifier: verifierWrapper.aggregateVerifierName ?? "", - subVerifierDetails: [], - network: verifierWrapper.networkType == .testnet ? .TESTNET : .MAINNET, + let tdsdk = CustomAuth(web3AuthClientId: web3AuthClientId, + aggregateVerifierType: verifierWrapper.verifierType, + aggregateVerifier: verifierWrapper.aggregateVerifierName ?? verifierWrapper.subverifier.verifier, + subVerifierDetails: [verifierWrapper.subverifier], + network: verifierWrapper.networkType == .testnet ? .legacy(.TESTNET) : .legacy(.MAINNET), loglevel: .error, - networkUrl: verifierWrapper.networkType == .testnet ? "https://rpc.ankr.com/eth_ropsten" : nil) + urlSession: self.networkService.urlSession, + networkUrl: verifierWrapper.networkType == .testnet ? "https://www.ankr.com/rpc/eth/eth_goerli" : nil) Task { @MainActor in do { let data = try await tdsdk.getAggregateTorusKey(verifier: verifierWrapper.aggregateVerifierName ?? "", verifierId: sub, idToken: token, subVerifierDetails: verifierWrapper.subverifier) - guard let privateKeyString = data["privateKey"] as? String, let wallet = TorusWallet(authProvider: .apple, username: displayName, userId: userIdentifier, profilePicture: nil, torusPrivateKey: privateKeyString) else { + guard let privateKeyString = data.finalKeyData?.privKey, let wallet = TorusWallet(authProvider: .apple, username: displayName, userId: userIdentifier, profilePicture: nil, torusPrivateKey: privateKeyString) else { Logger.torus.error("Error torus contained no, or invlaid private key") self.createWalletCompletion(Result.failure(KukaiError.internalApplicationError(error: TorusAuthError.invalidTorusResponse))) return diff --git a/Sources/KukaiCoreSwift/Services/WalletCacheService.swift b/Sources/KukaiCoreSwift/Services/WalletCacheService.swift index 2e8fd2c0..65e7f9fd 100644 --- a/Sources/KukaiCoreSwift/Services/WalletCacheService.swift +++ b/Sources/KukaiCoreSwift/Services/WalletCacheService.swift @@ -15,7 +15,7 @@ import os.log /// Error types that can be returned from `WalletCacheService` -enum WalletCacheError: Error { +public enum WalletCacheError: String, Error { case unableToAccessEnclaveOrKeychain case unableToCreatePrivateKey case unableToDeleteKey @@ -24,6 +24,9 @@ enum WalletCacheError: Error { case unableToEncrypt case noPrivateKeyFound case unableToDecrypt + case walletAlreadyExists + case requestedIndexTooHigh + case unableToEncryptAndWrite } @@ -44,7 +47,7 @@ public class WalletCacheService { fileprivate var privateKey: SecKey? /// The algorithm used by the enclave or keychain - fileprivate static var encryptionAlgorithm = SecKeyAlgorithm.eciesEncryptionCofactorX963SHA256AESGCM + fileprivate static var encryptionAlgorithm = SecKeyAlgorithm.eciesEncryptionCofactorVariableIVX963SHA256AESGCM /// The application key used to identify the encryption keys fileprivate static let applicationKey = "app.kukai.kukai-core-swift.walletcache.encryption" @@ -82,15 +85,15 @@ public class WalletCacheService { - Parameter childOfIndex: An optional `Int` to denote the index of the HD wallet that this wallet is a child of - Returns: Bool, indicating if the storage was successful or not */ - public func cache(wallet: T, childOfIndex: Int?, backedUp: Bool) -> Bool { - guard let existingWallets = readWalletsFromDiskAndDecrypt(), existingWallets[wallet.address] == nil else { + public func cache(wallet: T, childOfIndex: Int?, backedUp: Bool) throws { + guard let existingWallets = readWalletsFromDiskAndDecrypt() else { Logger.walletCache.error("cache - Unable to cache wallet, as can't decrypt existing wallets") - return false + throw WalletCacheError.unableToDecrypt } guard existingWallets[wallet.address] == nil else { - Logger.walletCache.error("cache - Unable to cache wallet, as wallet has no address") - return false + Logger.walletCache.error("cache - Unable to cache wallet, walelt already exists") + throw WalletCacheError.walletAlreadyExists } var newWallets = existingWallets @@ -100,7 +103,7 @@ public class WalletCacheService { if let index = childOfIndex { if index >= newMetadata.hdWallets.count { Logger.walletCache.error("WalletCacheService metadata insertion issue. Requested to add to HDWallet at index \"\(index)\", when there are currently only \"\(newMetadata.hdWallets.count)\" items") - return false + throw WalletCacheError.requestedIndexTooHigh } newMetadata.hdWallets[index].children.append(WalletMetadata(address: wallet.address, hdWalletGroupName: nil, walletNickname: nil, socialUsername: nil, type: wallet.type, children: [], isChild: true, isWatchOnly: false, bas58EncodedPublicKey: wallet.publicKeyBase58encoded(), backedUp: backedUp)) @@ -120,7 +123,7 @@ public class WalletCacheService { newMetadata.hdWallets.append(WalletMetadata(address: wallet.address, hdWalletGroupName: "HD Wallet \(newNumber)", walletNickname: nil, socialUsername: nil, socialType: nil, type: wallet.type, children: [], isChild: false, isWatchOnly: false, bas58EncodedPublicKey: wallet.publicKeyBase58encoded(), backedUp: backedUp)) } else if let torusWallet = wallet as? TorusWallet { - newMetadata.socialWallets.append(WalletMetadata(address: wallet.address, hdWalletGroupName: nil, walletNickname: nil, socialUsername: torusWallet.socialUserId ?? torusWallet.socialUsername, socialType: torusWallet.authProvider, type: wallet.type, children: [], isChild: false, isWatchOnly: false, bas58EncodedPublicKey: wallet.publicKeyBase58encoded(), backedUp: backedUp)) + newMetadata.socialWallets.append(WalletMetadata(address: wallet.address, hdWalletGroupName: nil, walletNickname: nil, socialUsername: torusWallet.socialUsername, socialUserId: torusWallet.socialUserId, socialType: torusWallet.authProvider, type: wallet.type, children: [], isChild: false, isWatchOnly: false, bas58EncodedPublicKey: wallet.publicKeyBase58encoded(), backedUp: backedUp)) } else if let _ = wallet as? LedgerWallet { newMetadata.ledgerWallets.append(WalletMetadata(address: wallet.address, hdWalletGroupName: nil, walletNickname: nil, socialUsername: nil, socialType: nil, type: wallet.type, children: [], isChild: false, isWatchOnly: false, bas58EncodedPublicKey: wallet.publicKeyBase58encoded(), backedUp: backedUp)) @@ -129,16 +132,27 @@ public class WalletCacheService { newMetadata.linearWallets.append(WalletMetadata(address: wallet.address, hdWalletGroupName: nil, walletNickname: nil, socialUsername: nil, socialType: nil, type: wallet.type, children: [], isChild: false, isWatchOnly: false, bas58EncodedPublicKey: wallet.publicKeyBase58encoded(), backedUp: backedUp)) } - return encryptAndWriteWalletsToDisk(wallets: newWallets) && encryptAndWriteMetadataToDisk(newMetadata) + + if encryptAndWriteWalletsToDisk(wallets: newWallets) && encryptAndWriteMetadataToDisk(newMetadata) == false { + throw WalletCacheError.unableToEncryptAndWrite + } } /** Cahce a watch wallet metadata obj, only. Metadata cahcing handled via wallet cache method */ - public func cacheWatchWallet(metadata: WalletMetadata) -> Bool { + public func cacheWatchWallet(metadata: WalletMetadata) throws { var list = readMetadataFromDiskAndDecrypt() + + if let _ = list.watchWallets.first(where: { $0.address == metadata.address }) { + Logger.walletCache.error("cacheWatchWallet - Unable to cache wallet, walelt already exists") + throw WalletCacheError.walletAlreadyExists + } + list.watchWallets.append(metadata) - return encryptAndWriteMetadataToDisk(list) + if encryptAndWriteMetadataToDisk(list) == false { + throw WalletCacheError.unableToEncryptAndWrite + } } /** @@ -256,7 +270,7 @@ public class WalletCacheService { var walletData: Data = Data() for wallet in wallets.values { switch wallet.type { - case .regular: + case .regular, .regularShifted: if let walletObj = wallet as? RegularWallet { walletData = try JSONEncoder().encode(walletObj) } @@ -337,7 +351,7 @@ public class WalletCacheService { let jsonObjAsData = try JSONSerialization.data(withJSONObject: jsonObj, options: .fragmentsAllowed) switch type { - case .regular: + case .regular, .regularShifted: let wallet = try JSONDecoder().decode(RegularWallet.self, from: jsonObjAsData) wallets[wallet.address] = wallet @@ -566,7 +580,6 @@ extension WalletCacheService { } return (public: mockPubKey, private: mockPrivKey) - } /** diff --git a/Sources/KukaiCoreSwift/Services/taquito_local_forging.js b/Sources/KukaiCoreSwift/Services/taquito_local_forging.js index dea6e278..b5361f50 100644 --- a/Sources/KukaiCoreSwift/Services/taquito_local_forging.js +++ b/Sources/KukaiCoreSwift/Services/taquito_local_forging.js @@ -5,5 +5,5 @@ Permission is hereby granted, free of charge, to any person obtaining a copy of The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -var taquito_local_forging;(()=>{var t={9437:(t,e,r)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=r(5457);function i(t,e,r){return void 0===e&&(e=new Uint8Array(2)),void 0===r&&(r=0),e[r+0]=t>>>8,e[r+1]=t>>>0,e}function o(t,e,r){return void 0===e&&(e=new Uint8Array(2)),void 0===r&&(r=0),e[r+0]=t>>>0,e[r+1]=t>>>8,e}function s(t,e){return void 0===e&&(e=0),t[e]<<24|t[e+1]<<16|t[e+2]<<8|t[e+3]}function a(t,e){return void 0===e&&(e=0),(t[e]<<24|t[e+1]<<16|t[e+2]<<8|t[e+3])>>>0}function f(t,e){return void 0===e&&(e=0),t[e+3]<<24|t[e+2]<<16|t[e+1]<<8|t[e]}function h(t,e){return void 0===e&&(e=0),(t[e+3]<<24|t[e+2]<<16|t[e+1]<<8|t[e])>>>0}function d(t,e,r){return void 0===e&&(e=new Uint8Array(4)),void 0===r&&(r=0),e[r+0]=t>>>24,e[r+1]=t>>>16,e[r+2]=t>>>8,e[r+3]=t>>>0,e}function c(t,e,r){return void 0===e&&(e=new Uint8Array(4)),void 0===r&&(r=0),e[r+0]=t>>>0,e[r+1]=t>>>8,e[r+2]=t>>>16,e[r+3]=t>>>24,e}function u(t,e,r){return void 0===e&&(e=new Uint8Array(8)),void 0===r&&(r=0),d(t/4294967296>>>0,e,r),d(t>>>0,e,r+4),e}function l(t,e,r){return void 0===e&&(e=new Uint8Array(8)),void 0===r&&(r=0),c(t>>>0,e,r),c(t/4294967296>>>0,e,r+4),e}e.readInt16BE=function(t,e){return void 0===e&&(e=0),(t[e+0]<<8|t[e+1])<<16>>16},e.readUint16BE=function(t,e){return void 0===e&&(e=0),(t[e+0]<<8|t[e+1])>>>0},e.readInt16LE=function(t,e){return void 0===e&&(e=0),(t[e+1]<<8|t[e])<<16>>16},e.readUint16LE=function(t,e){return void 0===e&&(e=0),(t[e+1]<<8|t[e])>>>0},e.writeUint16BE=i,e.writeInt16BE=i,e.writeUint16LE=o,e.writeInt16LE=o,e.readInt32BE=s,e.readUint32BE=a,e.readInt32LE=f,e.readUint32LE=h,e.writeUint32BE=d,e.writeInt32BE=d,e.writeUint32LE=c,e.writeInt32LE=c,e.readInt64BE=function(t,e){void 0===e&&(e=0);var r=s(t,e),n=s(t,e+4);return 4294967296*r+n-4294967296*(n>>31)},e.readUint64BE=function(t,e){return void 0===e&&(e=0),4294967296*a(t,e)+a(t,e+4)},e.readInt64LE=function(t,e){void 0===e&&(e=0);var r=f(t,e);return 4294967296*f(t,e+4)+r-4294967296*(r>>31)},e.readUint64LE=function(t,e){void 0===e&&(e=0);var r=h(t,e);return 4294967296*h(t,e+4)+r},e.writeUint64BE=u,e.writeInt64BE=u,e.writeUint64LE=l,e.writeInt64LE=l,e.readUintBE=function(t,e,r){if(void 0===r&&(r=0),t%8!=0)throw new Error("readUintBE supports only bitLengths divisible by 8");if(t/8>e.length-r)throw new Error("readUintBE: array is too short for the given bitLength");for(var n=0,i=1,o=t/8+r-1;o>=r;o--)n+=e[o]*i,i*=256;return n},e.readUintLE=function(t,e,r){if(void 0===r&&(r=0),t%8!=0)throw new Error("readUintLE supports only bitLengths divisible by 8");if(t/8>e.length-r)throw new Error("readUintLE: array is too short for the given bitLength");for(var n=0,i=1,o=r;o=i;s--)r[s]=e/o&255,o*=256;return r},e.writeUintLE=function(t,e,r,i){if(void 0===r&&(r=new Uint8Array(t/8)),void 0===i&&(i=0),t%8!=0)throw new Error("writeUintLE supports only bitLengths divisible by 8");if(!n.isSafeInteger(e))throw new Error("writeUintLE value must be an integer");for(var o=1,s=i;s{"use strict";var n=r(9437),i=r(2887);e.cn=128,e.k=64,e.Cv=64,e.fg=16,e.fe=16,e.zS=Math.pow(2,32)-1,e.d=255,e.lV=255;var o=new Uint32Array([4089235720,1779033703,2227873595,3144134277,4271175723,1013904242,1595750129,2773480762,2917565137,1359893119,725511199,2600822924,4215389547,528734635,327033209,1541459225]),s=[[0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30],[28,20,8,16,18,30,26,12,2,24,0,4,22,14,10,6],[22,16,24,0,10,4,30,26,20,28,6,12,14,2,18,8],[14,18,6,2,26,24,22,28,4,12,10,20,8,0,30,16],[18,0,10,14,4,8,20,30,28,2,22,24,12,16,6,26],[4,24,12,20,0,22,16,6,8,26,14,10,30,28,2,18],[24,10,2,30,28,26,8,20,0,14,12,6,18,4,16,22],[26,22,14,28,24,2,6,18,10,0,30,8,16,12,4,20],[12,30,28,18,22,6,0,16,24,4,26,14,2,8,20,10],[20,4,16,8,14,12,2,10,30,22,18,28,6,24,26,0],[0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30],[28,20,8,16,18,30,26,12,2,24,0,4,22,14,10,6]];!function(){function t(t,r){if(void 0===t&&(t=64),this.digestLength=t,this.blockSize=e.cn,this._state=new Int32Array(o),this._buffer=new Uint8Array(e.cn),this._bufferLength=0,this._ctr=new Uint32Array(4),this._flag=new Uint32Array(4),this._lastNode=!1,this._finished=!1,this._vtmp=new Uint32Array(32),this._mtmp=new Uint32Array(32),t<1||t>e.k)throw new Error("blake2b: wrong digest length");r&&this.validateConfig(r);var i=0;r&&r.key&&(i=r.key.length);var s=1,a=1;r&&r.tree&&(s=r.tree.fanout,a=r.tree.maxDepth),this._state[0]^=t|i<<8|s<<16|a<<24,r&&r.tree&&(this._state[1]^=r.tree.leafSize,this._state[2]^=r.tree.nodeOffsetLowBits,this._state[3]^=r.tree.nodeOffsetHighBits,this._state[4]^=r.tree.nodeDepth|r.tree.innerDigestLength<<8,this._lastNode=r.tree.lastNode),r&&r.salt&&(this._state[8]^=n.readUint32LE(r.salt,0),this._state[9]^=n.readUint32LE(r.salt,4),this._state[10]^=n.readUint32LE(r.salt,8),this._state[11]^=n.readUint32LE(r.salt,12)),r&&r.personalization&&(this._state[12]^=n.readUint32LE(r.personalization,0),this._state[13]^=n.readUint32LE(r.personalization,4),this._state[14]^=n.readUint32LE(r.personalization,8),this._state[15]^=n.readUint32LE(r.personalization,12)),this._initialState=new Uint32Array(this._state),r&&r.key&&i>0&&(this._paddedKey=new Uint8Array(e.cn),this._paddedKey.set(r.key),this._buffer.set(this._paddedKey),this._bufferLength=e.cn)}t.prototype.reset=function(){return this._state.set(this._initialState),this._paddedKey?(this._buffer.set(this._paddedKey),this._bufferLength=e.cn):this._bufferLength=0,i.wipe(this._ctr),i.wipe(this._flag),this._finished=!1,this},t.prototype.validateConfig=function(t){if(t.key&&t.key.length>e.Cv)throw new Error("blake2b: wrong key length");if(t.salt&&t.salt.length!==e.fe)throw new Error("blake2b: wrong salt length");if(t.personalization&&t.personalization.length!==e.fg)throw new Error("blake2b: wrong personalization length");if(t.tree){if(t.tree.fanout<0||t.tree.fanout>e.d)throw new Error("blake2b: wrong tree fanout");if(t.tree.maxDepth<0||t.tree.maxDepth>e.lV)throw new Error("blake2b: wrong tree depth");if(t.tree.leafSize<0||t.tree.leafSize>e.zS)throw new Error("blake2b: wrong leaf size");if(t.tree.innerDigestLength<0||t.tree.innerDigestLength>e.k)throw new Error("blake2b: wrong tree inner digest length")}},t.prototype.update=function(t,r){if(void 0===r&&(r=t.length),this._finished)throw new Error("blake2b: can't update because hash was finished.");var n=e.cn-this._bufferLength,i=0;if(0===r)return this;if(r>n){for(var o=0;oe.cn;){for(o=0;o>>16,S=65535&b,E=b>>>16;A+=p>>>16,S+=65535&g,E+=g>>>16,S+=(A+=(w+=65535&p)>>>16)>>>16,w=65535&(l=65535&w|A<<16),A=l>>>16,S=65535&(b=65535&S|(E+=S>>>16)<<16),E=b>>>16,A+=h>>>16,S+=65535&d,E+=d>>>16,l=65535&(w+=65535&h)|(A+=w>>>16)<<16,w=v^=b=65535&(S+=A>>>16)|(E+=S>>>16)<<16,v=_^=l,_=w,w=65535&m,A=m>>>16,S=65535&y,E=y>>>16,A+=_>>>16,S+=65535&v,E+=v>>>16,w=(p^=m=65535&(w+=65535&_)|(A+=w>>>16)<<16)<<8|(g^=y=65535&(S+=A>>>16)|(E+=S>>>16)<<16)>>>24,p=g<<8|p>>>24,g=w,w=65535&l,A=l>>>16,S=65535&b,E=b>>>16,A+=p>>>16,S+=65535&g,E+=g>>>16,S+=(A+=(w+=65535&p)>>>16)>>>16,w=65535&(l=65535&w|A<<16),A=l>>>16,S=65535&(b=65535&S|(E+=S>>>16)<<16),E=b>>>16,A+=c>>>16,S+=65535&u,E+=u>>>16,w=(_^=l=65535&(w+=65535&c)|(A+=w>>>16)<<16)<<16|(v^=b=65535&(S+=A>>>16)|(E+=S>>>16)<<16)>>>16,_=v<<16|_>>>16,v=w,w=65535&m,A=m>>>16,S=65535&y,E=y>>>16,A+=_>>>16,S+=65535&v,E+=v>>>16,w=(g^=y=65535&(S+=(A+=(w+=65535&_)>>>16)>>>16)|(E+=S>>>16)<<16)<<1|(p^=m=65535&w|A<<16)>>>31,p=p<<1|g>>>31,g=w,t[e]=l,t[o]=b,t[r]=p,t[s]=g,t[n]=m,t[a]=y,t[i]=_,t[f]=v},t.prototype._incrementCounter=function(t){for(var e=0;e<3;e++){var r=this._ctr[e]+t;if(this._ctr[e]=r>>>0,this._ctr[e]===r)return;t=1}},t.prototype._processBlock=function(t){this._incrementCounter(t);var e=this._vtmp;e.set(this._state),e.set(o,16),e[24]^=this._ctr[0],e[25]^=this._ctr[1],e[26]^=this._ctr[2],e[27]^=this._ctr[3],e[28]^=this._flag[0],e[29]^=this._flag[1],e[30]^=this._flag[2],e[31]^=this._flag[3];for(var r=this._mtmp,i=0;i<32;i++)r[i]=n.readUint32LE(this._buffer,4*i);for(var a=0;a<12;a++)this._G(e,0,8,16,24,1,9,17,25,r[s[a][0]],r[s[a][0]+1],r[s[a][1]],r[s[a][1]+1]),this._G(e,2,10,18,26,3,11,19,27,r[s[a][2]],r[s[a][2]+1],r[s[a][3]],r[s[a][3]+1]),this._G(e,4,12,20,28,5,13,21,29,r[s[a][4]],r[s[a][4]+1],r[s[a][5]],r[s[a][5]+1]),this._G(e,6,14,22,30,7,15,23,31,r[s[a][6]],r[s[a][6]+1],r[s[a][7]],r[s[a][7]+1]),this._G(e,0,10,20,30,1,11,21,31,r[s[a][8]],r[s[a][8]+1],r[s[a][9]],r[s[a][9]+1]),this._G(e,2,12,22,24,3,13,23,25,r[s[a][10]],r[s[a][10]+1],r[s[a][11]],r[s[a][11]+1]),this._G(e,4,14,16,26,5,15,17,27,r[s[a][12]],r[s[a][12]+1],r[s[a][13]],r[s[a][13]+1]),this._G(e,6,8,18,28,7,9,19,29,r[s[a][14]],r[s[a][14]+1],r[s[a][15]],r[s[a][15]+1]);for(i=0;i<16;i++)this._state[i]^=e[i]^e[i+16]}}()},7728:(t,e,r)=>{"use strict";e.aP=e.KS=e.jQ=void 0;r(1293),r(6756),r(2887);function n(t){const e=new Float64Array(16);if(t)for(let r=0;r{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.mul=Math.imul||function(t,e){var r=65535&t,n=65535&e;return r*n+((t>>>16&65535)*n+r*(e>>>16&65535)<<16>>>0)|0},e.add=function(t,e){return t+e|0},e.sub=function(t,e){return t-e|0},e.rotl=function(t,e){return t<>>32-e},e.rotr=function(t,e){return t<<32-e|t>>>e},e.isInteger=Number.isInteger||function(t){return"number"==typeof t&&isFinite(t)&&Math.floor(t)===t},e.MAX_SAFE_INTEGER=9007199254740991,e.isSafeInteger=function(t){return e.isInteger(t)&&t>=-e.MAX_SAFE_INTEGER&&t<=e.MAX_SAFE_INTEGER}},1293:(t,e,r)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.randomStringForEntropy=e.randomString=e.randomUint32=e.randomBytes=e.defaultRandomSource=void 0;const n=r(5147),i=r(9437),o=r(2887);function s(t,r=e.defaultRandomSource){return r.randomBytes(t)}e.defaultRandomSource=new n.SystemRandomSource,e.randomBytes=s,e.randomUint32=function(t=e.defaultRandomSource){const r=s(4,t),n=(0,i.readUint32LE)(r);return(0,o.wipe)(r),n};const a="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";function f(t,r=a,n=e.defaultRandomSource){if(r.length<2)throw new Error("randomString charset is too short");if(r.length>256)throw new Error("randomString charset is too long");let i="";const f=r.length,h=256-256%f;for(;t>0;){const e=s(Math.ceil(256*t/h),n);for(let n=0;n0;n++){const o=e[n];o{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.BrowserRandomSource=void 0,e.BrowserRandomSource=class{constructor(){this.isAvailable=!1,this.isInstantiated=!1;const t="undefined"!=typeof self?self.crypto||self.msCrypto:null;t&&void 0!==t.getRandomValues&&(this._crypto=t,this.isAvailable=!0,this.isInstantiated=!0)}randomBytes(t){if(!this.isAvailable||!this._crypto)throw new Error("Browser random byte generator is not available.");const e=new Uint8Array(t);for(let t=0;t{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.NodeRandomSource=void 0;const n=r(2887);e.NodeRandomSource=class{constructor(){this.isAvailable=!1,this.isInstantiated=!1;{const t=r(5477);t&&t.randomBytes&&(this._crypto=t,this.isAvailable=!0,this.isInstantiated=!0)}}randomBytes(t){if(!this.isAvailable||!this._crypto)throw new Error("Node.js random byte generator is not available.");let e=this._crypto.randomBytes(t);if(e.length!==t)throw new Error("NodeRandomSource: got fewer bytes than requested");const r=new Uint8Array(t);for(let t=0;t{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SystemRandomSource=void 0;const n=r(2017),i=r(7879);e.SystemRandomSource=class{constructor(){return this.isAvailable=!1,this.name="",this._source=new n.BrowserRandomSource,this._source.isAvailable?(this.isAvailable=!0,void(this.name="Browser")):(this._source=new i.NodeRandomSource,this._source.isAvailable?(this.isAvailable=!0,void(this.name="Node")):void 0)}randomBytes(t){if(!this.isAvailable)throw new Error("System random byte generator is not available.");return this._source.randomBytes(t)}}},6756:(t,e,r)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=r(9437),i=r(2887);e.DIGEST_LENGTH=64,e.BLOCK_SIZE=128;var o=function(){function t(){this.digestLength=e.DIGEST_LENGTH,this.blockSize=e.BLOCK_SIZE,this._stateHi=new Int32Array(8),this._stateLo=new Int32Array(8),this._tempHi=new Int32Array(16),this._tempLo=new Int32Array(16),this._buffer=new Uint8Array(256),this._bufferLength=0,this._bytesHashed=0,this._finished=!1,this.reset()}return t.prototype._initState=function(){this._stateHi[0]=1779033703,this._stateHi[1]=3144134277,this._stateHi[2]=1013904242,this._stateHi[3]=2773480762,this._stateHi[4]=1359893119,this._stateHi[5]=2600822924,this._stateHi[6]=528734635,this._stateHi[7]=1541459225,this._stateLo[0]=4089235720,this._stateLo[1]=2227873595,this._stateLo[2]=4271175723,this._stateLo[3]=1595750129,this._stateLo[4]=2917565137,this._stateLo[5]=725511199,this._stateLo[6]=4215389547,this._stateLo[7]=327033209},t.prototype.reset=function(){return this._initState(),this._bufferLength=0,this._bytesHashed=0,this._finished=!1,this},t.prototype.clean=function(){i.wipe(this._buffer),i.wipe(this._tempHi),i.wipe(this._tempLo),this.reset()},t.prototype.update=function(t,r){if(void 0===r&&(r=t.length),this._finished)throw new Error("SHA512: can't update because hash was finished.");var n=0;if(this._bytesHashed+=r,this._bufferLength>0){for(;this._bufferLength0;)this._buffer[this._bufferLength++]=t[n++],r--;this._bufferLength===this.blockSize&&(a(this._tempHi,this._tempLo,this._stateHi,this._stateLo,this._buffer,0,this.blockSize),this._bufferLength=0)}for(r>=this.blockSize&&(n=a(this._tempHi,this._tempLo,this._stateHi,this._stateLo,t,n,r),r%=this.blockSize);r>0;)this._buffer[this._bufferLength++]=t[n++],r--;return this},t.prototype.finish=function(t){if(!this._finished){var e=this._bytesHashed,r=this._bufferLength,i=e/536870912|0,o=e<<3,s=e%128<112?128:256;this._buffer[r]=128;for(var f=r+1;f0?new Uint8Array(this._buffer):void 0,bufferLength:this._bufferLength,bytesHashed:this._bytesHashed}},t.prototype.restoreState=function(t){return this._stateHi.set(t.stateHi),this._stateLo.set(t.stateLo),this._bufferLength=t.bufferLength,t.buffer&&this._buffer.set(t.buffer),this._bytesHashed=t.bytesHashed,this._finished=!1,this},t.prototype.cleanSavedState=function(t){i.wipe(t.stateHi),i.wipe(t.stateLo),t.buffer&&i.wipe(t.buffer),t.bufferLength=0,t.bytesHashed=0},t}();e.SHA512=o;var s=new Int32Array([1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591]);function a(t,e,r,i,o,a,f){for(var h,d,c,u,l,b,p,g,m=r[0],y=r[1],_=r[2],v=r[3],w=r[4],A=r[5],S=r[6],E=r[7],M=i[0],I=i[1],R=i[2],T=i[3],L=i[4],P=i[5],O=i[6],x=i[7];f>=128;){for(var N=0;N<16;N++){var B=8*N+a;t[N]=n.readUint32BE(o,B),e[N]=n.readUint32BE(o,B+4)}for(N=0;N<80;N++){var k,U,C=m,D=y,H=_,z=v,j=w,q=A,K=S,F=M,Z=I,G=R,$=T,V=L,X=P,W=O;if(l=65535&(d=x),b=d>>>16,p=65535&(h=E),g=h>>>16,l+=65535&(d=(L>>>14|w<<18)^(L>>>18|w<<14)^(w>>>9|L<<23)),b+=d>>>16,p+=65535&(h=(w>>>14|L<<18)^(w>>>18|L<<14)^(L>>>9|w<<23)),g+=h>>>16,l+=65535&(d=L&P^~L&O),b+=d>>>16,p+=65535&(h=w&A^~w&S),g+=h>>>16,h=s[2*N],l+=65535&(d=s[2*N+1]),b+=d>>>16,p+=65535&h,g+=h>>>16,h=t[N%16],b+=(d=e[N%16])>>>16,p+=65535&h,g+=h>>>16,p+=(b+=(l+=65535&d)>>>16)>>>16,l=65535&(d=u=65535&l|b<<16),b=d>>>16,p=65535&(h=c=65535&p|(g+=p>>>16)<<16),g=h>>>16,l+=65535&(d=(M>>>28|m<<4)^(m>>>2|M<<30)^(m>>>7|M<<25)),b+=d>>>16,p+=65535&(h=(m>>>28|M<<4)^(M>>>2|m<<30)^(M>>>7|m<<25)),g+=h>>>16,b+=(d=M&I^M&R^I&R)>>>16,p+=65535&(h=m&y^m&_^y&_),g+=h>>>16,k=65535&(p+=(b+=(l+=65535&d)>>>16)>>>16)|(g+=p>>>16)<<16,U=65535&l|b<<16,l=65535&(d=$),b=d>>>16,p=65535&(h=z),g=h>>>16,b+=(d=u)>>>16,p+=65535&(h=c),g+=h>>>16,y=C,_=D,v=H,w=z=65535&(p+=(b+=(l+=65535&d)>>>16)>>>16)|(g+=p>>>16)<<16,A=j,S=q,E=K,m=k,I=F,R=Z,T=G,L=$=65535&l|b<<16,P=V,O=X,x=W,M=U,N%16==15)for(B=0;B<16;B++)h=t[B],l=65535&(d=e[B]),b=d>>>16,p=65535&h,g=h>>>16,h=t[(B+9)%16],l+=65535&(d=e[(B+9)%16]),b+=d>>>16,p+=65535&h,g+=h>>>16,c=t[(B+1)%16],l+=65535&(d=((u=e[(B+1)%16])>>>1|c<<31)^(u>>>8|c<<24)^(u>>>7|c<<25)),b+=d>>>16,p+=65535&(h=(c>>>1|u<<31)^(c>>>8|u<<24)^c>>>7),g+=h>>>16,c=t[(B+14)%16],b+=(d=((u=e[(B+14)%16])>>>19|c<<13)^(c>>>29|u<<3)^(u>>>6|c<<26))>>>16,p+=65535&(h=(c>>>19|u<<13)^(u>>>29|c<<3)^c>>>6),g+=h>>>16,g+=(p+=(b+=(l+=65535&d)>>>16)>>>16)>>>16,t[B]=65535&p|g<<16,e[B]=65535&l|b<<16}l=65535&(d=M),b=d>>>16,p=65535&(h=m),g=h>>>16,h=r[0],b+=(d=i[0])>>>16,p+=65535&h,g+=h>>>16,g+=(p+=(b+=(l+=65535&d)>>>16)>>>16)>>>16,r[0]=m=65535&p|g<<16,i[0]=M=65535&l|b<<16,l=65535&(d=I),b=d>>>16,p=65535&(h=y),g=h>>>16,h=r[1],b+=(d=i[1])>>>16,p+=65535&h,g+=h>>>16,g+=(p+=(b+=(l+=65535&d)>>>16)>>>16)>>>16,r[1]=y=65535&p|g<<16,i[1]=I=65535&l|b<<16,l=65535&(d=R),b=d>>>16,p=65535&(h=_),g=h>>>16,h=r[2],b+=(d=i[2])>>>16,p+=65535&h,g+=h>>>16,g+=(p+=(b+=(l+=65535&d)>>>16)>>>16)>>>16,r[2]=_=65535&p|g<<16,i[2]=R=65535&l|b<<16,l=65535&(d=T),b=d>>>16,p=65535&(h=v),g=h>>>16,h=r[3],b+=(d=i[3])>>>16,p+=65535&h,g+=h>>>16,g+=(p+=(b+=(l+=65535&d)>>>16)>>>16)>>>16,r[3]=v=65535&p|g<<16,i[3]=T=65535&l|b<<16,l=65535&(d=L),b=d>>>16,p=65535&(h=w),g=h>>>16,h=r[4],b+=(d=i[4])>>>16,p+=65535&h,g+=h>>>16,g+=(p+=(b+=(l+=65535&d)>>>16)>>>16)>>>16,r[4]=w=65535&p|g<<16,i[4]=L=65535&l|b<<16,l=65535&(d=P),b=d>>>16,p=65535&(h=A),g=h>>>16,h=r[5],b+=(d=i[5])>>>16,p+=65535&h,g+=h>>>16,g+=(p+=(b+=(l+=65535&d)>>>16)>>>16)>>>16,r[5]=A=65535&p|g<<16,i[5]=P=65535&l|b<<16,l=65535&(d=O),b=d>>>16,p=65535&(h=S),g=h>>>16,h=r[6],b+=(d=i[6])>>>16,p+=65535&h,g+=h>>>16,g+=(p+=(b+=(l+=65535&d)>>>16)>>>16)>>>16,r[6]=S=65535&p|g<<16,i[6]=O=65535&l|b<<16,l=65535&(d=x),b=d>>>16,p=65535&(h=E),g=h>>>16,h=r[7],b+=(d=i[7])>>>16,p+=65535&h,g+=h>>>16,g+=(p+=(b+=(l+=65535&d)>>>16)>>>16)>>>16,r[7]=E=65535&p|g<<16,i[7]=x=65535&l|b<<16,a+=128,f-=128}return a}e.hash=function(t){var e=new o;e.update(t);var r=e.digest();return e.clean(),r}},2887:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.wipe=function(t){for(var e=0;e{"use strict";var n=r(7834).Buffer;t.exports=function(t){if(t.length>=255)throw new TypeError("Alphabet too long");for(var e=new Uint8Array(256),r=0;r>>0,d=new Uint8Array(s);t[r];){var c=e[t.charCodeAt(r)];if(255===c)return;for(var u=0,l=s-1;(0!==c||u>>0,d[l]=c%256>>>0,c=c/256>>>0;if(0!==c)throw new Error("Non-zero carry");o=u,r++}for(var b=s-o;b!==s&&0===d[b];)b++;var p=n.allocUnsafe(i+(s-b));p.fill(0,0,i);for(var g=i;b!==s;)p[g++]=d[b++];return p}return{encode:function(e){if((Array.isArray(e)||e instanceof Uint8Array)&&(e=n.from(e)),!n.isBuffer(e))throw new TypeError("Expected Buffer");if(0===e.length)return"";for(var r=0,i=0,o=0,s=e.length;o!==s&&0===e[o];)o++,r++;for(var h=(s-o)*d+1>>>0,c=new Uint8Array(h);o!==s;){for(var u=e[o],l=0,b=h-1;(0!==u||l>>0,c[b]=u%a>>>0,u=u/a>>>0;if(0!==u)throw new Error("Non-zero carry");i=l,o++}for(var p=h-i;p!==h&&0===c[p];)p++;for(var g=f.repeat(r);p{"use strict";e.byteLength=function(t){var e=a(t),r=e[0],n=e[1];return 3*(r+n)/4-n},e.toByteArray=function(t){var e,r,o=a(t),s=o[0],f=o[1],h=new i(function(t,e,r){return 3*(e+r)/4-r}(0,s,f)),d=0,c=f>0?s-4:s;for(r=0;r>16&255,h[d++]=e>>8&255,h[d++]=255&e;return 2===f&&(e=n[t.charCodeAt(r)]<<2|n[t.charCodeAt(r+1)]>>4,h[d++]=255&e),1===f&&(e=n[t.charCodeAt(r)]<<10|n[t.charCodeAt(r+1)]<<4|n[t.charCodeAt(r+2)]>>2,h[d++]=e>>8&255,h[d++]=255&e),h},e.fromByteArray=function(t){for(var e,n=t.length,i=n%3,o=[],s=16383,a=0,h=n-i;ah?h:a+s));return 1===i?(e=t[n-1],o.push(r[e>>2]+r[e<<4&63]+"==")):2===i&&(e=(t[n-2]<<8)+t[n-1],o.push(r[e>>10]+r[e>>4&63]+r[e<<2&63]+"=")),o.join("")};for(var r=[],n=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0;s<64;++s)r[s]=o[s],n[o.charCodeAt(s)]=s;function a(t){var e=t.length;if(e%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function f(t,e,n){for(var i,o,s=[],a=e;a>18&63]+r[o>>12&63]+r[o>>6&63]+r[63&o]);return s.join("")}n["-".charCodeAt(0)]=62,n["_".charCodeAt(0)]=63},651:(t,e,r)=>{const n=r(7967);function i(t,e,r){const n=t[e]+t[r];let i=t[e+1]+t[r+1];n>=4294967296&&i++,t[e]=n,t[e+1]=i}function o(t,e,r,n){let i=t[e]+r;r<0&&(i+=4294967296);let o=t[e+1]+n;i>=4294967296&&o++,t[e]=i,t[e+1]=o}function s(t,e){return t[e]^t[e+1]<<8^t[e+2]<<16^t[e+3]<<24}function a(t,e,r,n,s,a){const f=c[s],h=c[s+1],u=c[a],l=c[a+1];i(d,t,e),o(d,t,f,h);let b=d[n]^d[t],p=d[n+1]^d[t+1];d[n]=p,d[n+1]=b,i(d,r,n),b=d[e]^d[r],p=d[e+1]^d[r+1],d[e]=b>>>24^p<<8,d[e+1]=p>>>24^b<<8,i(d,t,e),o(d,t,u,l),b=d[n]^d[t],p=d[n+1]^d[t+1],d[n]=b>>>16^p<<16,d[n+1]=p>>>16^b<<16,i(d,r,n),b=d[e]^d[r],p=d[e+1]^d[r+1],d[e]=p>>>31^b<<1,d[e+1]=b>>>31^p<<1}const f=new Uint32Array([4089235720,1779033703,2227873595,3144134277,4271175723,1013904242,1595750129,2773480762,2917565137,1359893119,725511199,2600822924,4215389547,528734635,327033209,1541459225]),h=new Uint8Array([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,14,10,4,8,9,15,13,6,1,12,0,2,11,7,5,3,11,8,12,0,5,2,15,13,10,14,3,6,7,1,9,4,7,9,3,1,13,12,11,14,2,6,5,10,4,0,15,8,9,0,5,7,2,4,10,15,14,1,11,12,6,8,3,13,2,12,6,10,0,11,8,3,4,13,7,5,15,14,1,9,12,5,1,15,14,13,4,10,0,7,6,3,9,2,8,11,13,11,7,14,12,1,3,9,5,0,15,4,8,6,2,10,6,15,14,9,11,3,0,8,12,2,13,7,1,4,10,5,10,2,8,4,7,6,1,5,15,11,9,14,3,12,13,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,14,10,4,8,9,15,13,6,1,12,0,2,11,7,5,3].map((function(t){return 2*t}))),d=new Uint32Array(32),c=new Uint32Array(32);function u(t,e){let r=0;for(r=0;r<16;r++)d[r]=t.h[r],d[r+16]=f[r];for(d[24]=d[24]^t.t,d[25]=d[25]^t.t/4294967296,e&&(d[28]=~d[28],d[29]=~d[29]),r=0;r<32;r++)c[r]=s(t.b,4*r);for(r=0;r<12;r++)a(0,8,16,24,h[16*r+0],h[16*r+1]),a(2,10,18,26,h[16*r+2],h[16*r+3]),a(4,12,20,28,h[16*r+4],h[16*r+5]),a(6,14,22,30,h[16*r+6],h[16*r+7]),a(0,10,20,30,h[16*r+8],h[16*r+9]),a(2,12,22,24,h[16*r+10],h[16*r+11]),a(4,14,16,26,h[16*r+12],h[16*r+13]),a(6,8,18,28,h[16*r+14],h[16*r+15]);for(r=0;r<16;r++)t.h[r]=t.h[r]^d[r]^d[r+16]}const l=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]);function b(t,e,r,n){if(0===t||t>64)throw new Error("Illegal output length, expected 0 < length <= 64");if(e&&e.length>64)throw new Error("Illegal key, expected Uint8Array with 0 < length <= 64");if(r&&16!==r.length)throw new Error("Illegal salt, expected Uint8Array with length is 16");if(n&&16!==n.length)throw new Error("Illegal personal, expected Uint8Array with length is 16");const i={b:new Uint8Array(128),h:new Uint32Array(16),t:0,c:0,outlen:t};l.fill(0),l[0]=t,e&&(l[1]=e.length),l[2]=1,l[3]=1,r&&l.set(r,32),n&&l.set(n,48);for(let t=0;t<16;t++)i.h[t]=f[t]^s(l,4*t);return e&&(p(i,e),i.c=128),i}function p(t,e){for(let r=0;r>2]>>8*(3&r);return e}function m(t,e,r,i,o){r=r||64,t=n.normalizeInput(t),i&&(i=n.normalizeInput(i)),o&&(o=n.normalizeInput(o));const s=b(r,e,i,o);return p(s,t),g(s)}t.exports={blake2b:m,blake2bHex:function(t,e,r,i,o){const s=m(t,e,r,i,o);return n.toHex(s)},blake2bInit:b,blake2bUpdate:p,blake2bFinal:g}},9962:(t,e,r)=>{const n=r(7967);function i(t,e){return t[e]^t[e+1]<<8^t[e+2]<<16^t[e+3]<<24}function o(t,e,r,n,i,o){h[t]=h[t]+h[e]+i,h[n]=s(h[n]^h[t],16),h[r]=h[r]+h[n],h[e]=s(h[e]^h[r],12),h[t]=h[t]+h[e]+o,h[n]=s(h[n]^h[t],8),h[r]=h[r]+h[n],h[e]=s(h[e]^h[r],7)}function s(t,e){return t>>>e^t<<32-e}const a=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),f=new Uint8Array([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,14,10,4,8,9,15,13,6,1,12,0,2,11,7,5,3,11,8,12,0,5,2,15,13,10,14,3,6,7,1,9,4,7,9,3,1,13,12,11,14,2,6,5,10,4,0,15,8,9,0,5,7,2,4,10,15,14,1,11,12,6,8,3,13,2,12,6,10,0,11,8,3,4,13,7,5,15,14,1,9,12,5,1,15,14,13,4,10,0,7,6,3,9,2,8,11,13,11,7,14,12,1,3,9,5,0,15,4,8,6,2,10,6,15,14,9,11,3,0,8,12,2,13,7,1,4,10,5,10,2,8,4,7,6,1,5,15,11,9,14,3,12,13,0]),h=new Uint32Array(16),d=new Uint32Array(16);function c(t,e){let r=0;for(r=0;r<8;r++)h[r]=t.h[r],h[r+8]=a[r];for(h[12]^=t.t,h[13]^=t.t/4294967296,e&&(h[14]=~h[14]),r=0;r<16;r++)d[r]=i(t.b,4*r);for(r=0;r<10;r++)o(0,4,8,12,d[f[16*r+0]],d[f[16*r+1]]),o(1,5,9,13,d[f[16*r+2]],d[f[16*r+3]]),o(2,6,10,14,d[f[16*r+4]],d[f[16*r+5]]),o(3,7,11,15,d[f[16*r+6]],d[f[16*r+7]]),o(0,5,10,15,d[f[16*r+8]],d[f[16*r+9]]),o(1,6,11,12,d[f[16*r+10]],d[f[16*r+11]]),o(2,7,8,13,d[f[16*r+12]],d[f[16*r+13]]),o(3,4,9,14,d[f[16*r+14]],d[f[16*r+15]]);for(r=0;r<8;r++)t.h[r]^=h[r]^h[r+8]}function u(t,e){if(!(t>0&&t<=32))throw new Error("Incorrect output length, should be in [1, 32]");const r=e?e.length:0;if(e&&!(r>0&&r<=32))throw new Error("Incorrect key length, should be in [1, 32]");const n={h:new Uint32Array(a),b:new Uint8Array(64),c:0,t:0,outlen:t};return n.h[0]^=16842752^r<<8^t,r>0&&(l(n,e),n.c=64),n}function l(t,e){for(let r=0;r>2]>>8*(3&r)&255;return e}function p(t,e,r){r=r||32,t=n.normalizeInput(t);const i=u(r,e);return l(i,t),b(i)}t.exports={blake2s:p,blake2sHex:function(t,e,r){const i=p(t,e,r);return n.toHex(i)},blake2sInit:u,blake2sUpdate:l,blake2sFinal:b}},1395:(t,e,r)=>{const n=r(651),i=r(9962);t.exports={blake2b:n.blake2b,blake2bHex:n.blake2bHex,blake2bInit:n.blake2bInit,blake2bUpdate:n.blake2bUpdate,blake2bFinal:n.blake2bFinal,blake2s:i.blake2s,blake2sHex:i.blake2sHex,blake2sInit:i.blake2sInit,blake2sUpdate:i.blake2sUpdate,blake2sFinal:i.blake2sFinal}},7967:t=>{function e(t){return(4294967296+t).toString(16).substring(1)}t.exports={normalizeInput:function(t){let e;if(t instanceof Uint8Array)e=t;else{if("string"!=typeof t)throw new Error("Input must be an string, Buffer or Uint8Array");e=(new TextEncoder).encode(t)}return e},toHex:function(t){return Array.prototype.map.call(t,(function(t){return(t<16?"0":"")+t.toString(16)})).join("")},debugPrint:function(t,r,n){let i="\n"+t+" = ";for(let o=0;o=65&&r<=70?r-55:r>=97&&r<=102?r-87:r-48&15}function f(t,e,r){var n=a(t,r);return r-1>=e&&(n|=a(t,r-1)<<4),n}function h(t,e,r,n){for(var i=0,o=Math.min(t.length,r),s=e;s=49?a-49+10:a>=17?a-17+10:a}return i}o.isBN=function(t){return t instanceof o||null!==t&&"object"==typeof t&&t.constructor.wordSize===o.wordSize&&Array.isArray(t.words)},o.max=function(t,e){return t.cmp(e)>0?t:e},o.min=function(t,e){return t.cmp(e)<0?t:e},o.prototype._init=function(t,e,r){if("number"==typeof t)return this._initNumber(t,e,r);if("object"==typeof t)return this._initArray(t,e,r);"hex"===e&&(e=16),n(e===(0|e)&&e>=2&&e<=36);var i=0;"-"===(t=t.toString().replace(/\s+/g,""))[0]&&(i++,this.negative=1),i=0;i-=3)s=t[i]|t[i-1]<<8|t[i-2]<<16,this.words[o]|=s<>>26-a&67108863,(a+=24)>=26&&(a-=26,o++);else if("le"===r)for(i=0,o=0;i>>26-a&67108863,(a+=24)>=26&&(a-=26,o++);return this.strip()},o.prototype._parseHex=function(t,e,r){this.length=Math.ceil((t.length-e)/6),this.words=new Array(this.length);for(var n=0;n=e;n-=2)i=f(t,e,n)<=18?(o-=18,s+=1,this.words[s]|=i>>>26):o+=8;else for(n=(t.length-e)%2==0?e+1:e;n=18?(o-=18,s+=1,this.words[s]|=i>>>26):o+=8;this.strip()},o.prototype._parseBase=function(t,e,r){this.words=[0],this.length=1;for(var n=0,i=1;i<=67108863;i*=e)n++;n--,i=i/e|0;for(var o=t.length-r,s=o%n,a=Math.min(o,o-s)+r,f=0,d=r;d1&&0===this.words[this.length-1];)this.length--;return this._normSign()},o.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},o.prototype.inspect=function(){return(this.red?""};var d=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],c=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],u=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function l(t,e,r){r.negative=e.negative^t.negative;var n=t.length+e.length|0;r.length=n,n=n-1|0;var i=0|t.words[0],o=0|e.words[0],s=i*o,a=67108863&s,f=s/67108864|0;r.words[0]=a;for(var h=1;h>>26,c=67108863&f,u=Math.min(h,e.length-1),l=Math.max(0,h-t.length+1);l<=u;l++){var b=h-l|0;d+=(s=(i=0|t.words[b])*(o=0|e.words[l])+c)/67108864|0,c=67108863&s}r.words[h]=0|c,f=0|d}return 0!==f?r.words[h]=0|f:r.length--,r.strip()}o.prototype.toString=function(t,e){var r;if(e=0|e||1,16===(t=t||10)||"hex"===t){r="";for(var i=0,o=0,s=0;s>>24-i&16777215)||s!==this.length-1?d[6-f.length]+f+r:f+r,(i+=2)>=26&&(i-=26,s--)}for(0!==o&&(r=o.toString(16)+r);r.length%e!=0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}if(t===(0|t)&&t>=2&&t<=36){var h=c[t],l=u[t];r="";var b=this.clone();for(b.negative=0;!b.isZero();){var p=b.modn(l).toString(t);r=(b=b.idivn(l)).isZero()?p+r:d[h-p.length]+p+r}for(this.isZero()&&(r="0"+r);r.length%e!=0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}n(!1,"Base should be between 2 and 36")},o.prototype.toNumber=function(){var t=this.words[0];return 2===this.length?t+=67108864*this.words[1]:3===this.length&&1===this.words[2]?t+=4503599627370496+67108864*this.words[1]:this.length>2&&n(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-t:t},o.prototype.toJSON=function(){return this.toString(16)},o.prototype.toBuffer=function(t,e){return n(void 0!==s),this.toArrayLike(s,t,e)},o.prototype.toArray=function(t,e){return this.toArrayLike(Array,t,e)},o.prototype.toArrayLike=function(t,e,r){var i=this.byteLength(),o=r||Math.max(1,i);n(i<=o,"byte array longer than desired length"),n(o>0,"Requested array length <= 0"),this.strip();var s,a,f="le"===e,h=new t(o),d=this.clone();if(f){for(a=0;!d.isZero();a++)s=d.andln(255),d.iushrn(8),h[a]=s;for(;a=4096&&(r+=13,e>>>=13),e>=64&&(r+=7,e>>>=7),e>=8&&(r+=4,e>>>=4),e>=2&&(r+=2,e>>>=2),r+e},o.prototype._zeroBits=function(t){if(0===t)return 26;var e=t,r=0;return 0==(8191&e)&&(r+=13,e>>>=13),0==(127&e)&&(r+=7,e>>>=7),0==(15&e)&&(r+=4,e>>>=4),0==(3&e)&&(r+=2,e>>>=2),0==(1&e)&&r++,r},o.prototype.bitLength=function(){var t=this.words[this.length-1],e=this._countBits(t);return 26*(this.length-1)+e},o.prototype.zeroBits=function(){if(this.isZero())return 0;for(var t=0,e=0;et.length?this.clone().ior(t):t.clone().ior(this)},o.prototype.uor=function(t){return this.length>t.length?this.clone().iuor(t):t.clone().iuor(this)},o.prototype.iuand=function(t){var e;e=this.length>t.length?t:this;for(var r=0;rt.length?this.clone().iand(t):t.clone().iand(this)},o.prototype.uand=function(t){return this.length>t.length?this.clone().iuand(t):t.clone().iuand(this)},o.prototype.iuxor=function(t){var e,r;this.length>t.length?(e=this,r=t):(e=t,r=this);for(var n=0;nt.length?this.clone().ixor(t):t.clone().ixor(this)},o.prototype.uxor=function(t){return this.length>t.length?this.clone().iuxor(t):t.clone().iuxor(this)},o.prototype.inotn=function(t){n("number"==typeof t&&t>=0);var e=0|Math.ceil(t/26),r=t%26;this._expand(e),r>0&&e--;for(var i=0;i0&&(this.words[i]=~this.words[i]&67108863>>26-r),this.strip()},o.prototype.notn=function(t){return this.clone().inotn(t)},o.prototype.setn=function(t,e){n("number"==typeof t&&t>=0);var r=t/26|0,i=t%26;return this._expand(r+1),this.words[r]=e?this.words[r]|1<t.length?(r=this,n=t):(r=t,n=this);for(var i=0,o=0;o>>26;for(;0!==i&&o>>26;if(this.length=r.length,0!==i)this.words[this.length]=i,this.length++;else if(r!==this)for(;ot.length?this.clone().iadd(t):t.clone().iadd(this)},o.prototype.isub=function(t){if(0!==t.negative){t.negative=0;var e=this.iadd(t);return t.negative=1,e._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(t),this.negative=1,this._normSign();var r,n,i=this.cmp(t);if(0===i)return this.negative=0,this.length=1,this.words[0]=0,this;i>0?(r=this,n=t):(r=t,n=this);for(var o=0,s=0;s>26,this.words[s]=67108863&e;for(;0!==o&&s>26,this.words[s]=67108863&e;if(0===o&&s>>13,l=0|s[1],b=8191&l,p=l>>>13,g=0|s[2],m=8191&g,y=g>>>13,_=0|s[3],v=8191&_,w=_>>>13,A=0|s[4],S=8191&A,E=A>>>13,M=0|s[5],I=8191&M,R=M>>>13,T=0|s[6],L=8191&T,P=T>>>13,O=0|s[7],x=8191&O,N=O>>>13,B=0|s[8],k=8191&B,U=B>>>13,C=0|s[9],D=8191&C,H=C>>>13,z=0|a[0],j=8191&z,q=z>>>13,K=0|a[1],F=8191&K,Z=K>>>13,G=0|a[2],$=8191&G,V=G>>>13,X=0|a[3],W=8191&X,Y=X>>>13,J=0|a[4],Q=8191&J,tt=J>>>13,et=0|a[5],rt=8191&et,nt=et>>>13,it=0|a[6],ot=8191&it,st=it>>>13,at=0|a[7],ft=8191&at,ht=at>>>13,dt=0|a[8],ct=8191&dt,ut=dt>>>13,lt=0|a[9],bt=8191<,pt=lt>>>13;r.negative=t.negative^e.negative,r.length=19;var gt=(h+(n=Math.imul(c,j))|0)+((8191&(i=(i=Math.imul(c,q))+Math.imul(u,j)|0))<<13)|0;h=((o=Math.imul(u,q))+(i>>>13)|0)+(gt>>>26)|0,gt&=67108863,n=Math.imul(b,j),i=(i=Math.imul(b,q))+Math.imul(p,j)|0,o=Math.imul(p,q);var mt=(h+(n=n+Math.imul(c,F)|0)|0)+((8191&(i=(i=i+Math.imul(c,Z)|0)+Math.imul(u,F)|0))<<13)|0;h=((o=o+Math.imul(u,Z)|0)+(i>>>13)|0)+(mt>>>26)|0,mt&=67108863,n=Math.imul(m,j),i=(i=Math.imul(m,q))+Math.imul(y,j)|0,o=Math.imul(y,q),n=n+Math.imul(b,F)|0,i=(i=i+Math.imul(b,Z)|0)+Math.imul(p,F)|0,o=o+Math.imul(p,Z)|0;var yt=(h+(n=n+Math.imul(c,$)|0)|0)+((8191&(i=(i=i+Math.imul(c,V)|0)+Math.imul(u,$)|0))<<13)|0;h=((o=o+Math.imul(u,V)|0)+(i>>>13)|0)+(yt>>>26)|0,yt&=67108863,n=Math.imul(v,j),i=(i=Math.imul(v,q))+Math.imul(w,j)|0,o=Math.imul(w,q),n=n+Math.imul(m,F)|0,i=(i=i+Math.imul(m,Z)|0)+Math.imul(y,F)|0,o=o+Math.imul(y,Z)|0,n=n+Math.imul(b,$)|0,i=(i=i+Math.imul(b,V)|0)+Math.imul(p,$)|0,o=o+Math.imul(p,V)|0;var _t=(h+(n=n+Math.imul(c,W)|0)|0)+((8191&(i=(i=i+Math.imul(c,Y)|0)+Math.imul(u,W)|0))<<13)|0;h=((o=o+Math.imul(u,Y)|0)+(i>>>13)|0)+(_t>>>26)|0,_t&=67108863,n=Math.imul(S,j),i=(i=Math.imul(S,q))+Math.imul(E,j)|0,o=Math.imul(E,q),n=n+Math.imul(v,F)|0,i=(i=i+Math.imul(v,Z)|0)+Math.imul(w,F)|0,o=o+Math.imul(w,Z)|0,n=n+Math.imul(m,$)|0,i=(i=i+Math.imul(m,V)|0)+Math.imul(y,$)|0,o=o+Math.imul(y,V)|0,n=n+Math.imul(b,W)|0,i=(i=i+Math.imul(b,Y)|0)+Math.imul(p,W)|0,o=o+Math.imul(p,Y)|0;var vt=(h+(n=n+Math.imul(c,Q)|0)|0)+((8191&(i=(i=i+Math.imul(c,tt)|0)+Math.imul(u,Q)|0))<<13)|0;h=((o=o+Math.imul(u,tt)|0)+(i>>>13)|0)+(vt>>>26)|0,vt&=67108863,n=Math.imul(I,j),i=(i=Math.imul(I,q))+Math.imul(R,j)|0,o=Math.imul(R,q),n=n+Math.imul(S,F)|0,i=(i=i+Math.imul(S,Z)|0)+Math.imul(E,F)|0,o=o+Math.imul(E,Z)|0,n=n+Math.imul(v,$)|0,i=(i=i+Math.imul(v,V)|0)+Math.imul(w,$)|0,o=o+Math.imul(w,V)|0,n=n+Math.imul(m,W)|0,i=(i=i+Math.imul(m,Y)|0)+Math.imul(y,W)|0,o=o+Math.imul(y,Y)|0,n=n+Math.imul(b,Q)|0,i=(i=i+Math.imul(b,tt)|0)+Math.imul(p,Q)|0,o=o+Math.imul(p,tt)|0;var wt=(h+(n=n+Math.imul(c,rt)|0)|0)+((8191&(i=(i=i+Math.imul(c,nt)|0)+Math.imul(u,rt)|0))<<13)|0;h=((o=o+Math.imul(u,nt)|0)+(i>>>13)|0)+(wt>>>26)|0,wt&=67108863,n=Math.imul(L,j),i=(i=Math.imul(L,q))+Math.imul(P,j)|0,o=Math.imul(P,q),n=n+Math.imul(I,F)|0,i=(i=i+Math.imul(I,Z)|0)+Math.imul(R,F)|0,o=o+Math.imul(R,Z)|0,n=n+Math.imul(S,$)|0,i=(i=i+Math.imul(S,V)|0)+Math.imul(E,$)|0,o=o+Math.imul(E,V)|0,n=n+Math.imul(v,W)|0,i=(i=i+Math.imul(v,Y)|0)+Math.imul(w,W)|0,o=o+Math.imul(w,Y)|0,n=n+Math.imul(m,Q)|0,i=(i=i+Math.imul(m,tt)|0)+Math.imul(y,Q)|0,o=o+Math.imul(y,tt)|0,n=n+Math.imul(b,rt)|0,i=(i=i+Math.imul(b,nt)|0)+Math.imul(p,rt)|0,o=o+Math.imul(p,nt)|0;var At=(h+(n=n+Math.imul(c,ot)|0)|0)+((8191&(i=(i=i+Math.imul(c,st)|0)+Math.imul(u,ot)|0))<<13)|0;h=((o=o+Math.imul(u,st)|0)+(i>>>13)|0)+(At>>>26)|0,At&=67108863,n=Math.imul(x,j),i=(i=Math.imul(x,q))+Math.imul(N,j)|0,o=Math.imul(N,q),n=n+Math.imul(L,F)|0,i=(i=i+Math.imul(L,Z)|0)+Math.imul(P,F)|0,o=o+Math.imul(P,Z)|0,n=n+Math.imul(I,$)|0,i=(i=i+Math.imul(I,V)|0)+Math.imul(R,$)|0,o=o+Math.imul(R,V)|0,n=n+Math.imul(S,W)|0,i=(i=i+Math.imul(S,Y)|0)+Math.imul(E,W)|0,o=o+Math.imul(E,Y)|0,n=n+Math.imul(v,Q)|0,i=(i=i+Math.imul(v,tt)|0)+Math.imul(w,Q)|0,o=o+Math.imul(w,tt)|0,n=n+Math.imul(m,rt)|0,i=(i=i+Math.imul(m,nt)|0)+Math.imul(y,rt)|0,o=o+Math.imul(y,nt)|0,n=n+Math.imul(b,ot)|0,i=(i=i+Math.imul(b,st)|0)+Math.imul(p,ot)|0,o=o+Math.imul(p,st)|0;var St=(h+(n=n+Math.imul(c,ft)|0)|0)+((8191&(i=(i=i+Math.imul(c,ht)|0)+Math.imul(u,ft)|0))<<13)|0;h=((o=o+Math.imul(u,ht)|0)+(i>>>13)|0)+(St>>>26)|0,St&=67108863,n=Math.imul(k,j),i=(i=Math.imul(k,q))+Math.imul(U,j)|0,o=Math.imul(U,q),n=n+Math.imul(x,F)|0,i=(i=i+Math.imul(x,Z)|0)+Math.imul(N,F)|0,o=o+Math.imul(N,Z)|0,n=n+Math.imul(L,$)|0,i=(i=i+Math.imul(L,V)|0)+Math.imul(P,$)|0,o=o+Math.imul(P,V)|0,n=n+Math.imul(I,W)|0,i=(i=i+Math.imul(I,Y)|0)+Math.imul(R,W)|0,o=o+Math.imul(R,Y)|0,n=n+Math.imul(S,Q)|0,i=(i=i+Math.imul(S,tt)|0)+Math.imul(E,Q)|0,o=o+Math.imul(E,tt)|0,n=n+Math.imul(v,rt)|0,i=(i=i+Math.imul(v,nt)|0)+Math.imul(w,rt)|0,o=o+Math.imul(w,nt)|0,n=n+Math.imul(m,ot)|0,i=(i=i+Math.imul(m,st)|0)+Math.imul(y,ot)|0,o=o+Math.imul(y,st)|0,n=n+Math.imul(b,ft)|0,i=(i=i+Math.imul(b,ht)|0)+Math.imul(p,ft)|0,o=o+Math.imul(p,ht)|0;var Et=(h+(n=n+Math.imul(c,ct)|0)|0)+((8191&(i=(i=i+Math.imul(c,ut)|0)+Math.imul(u,ct)|0))<<13)|0;h=((o=o+Math.imul(u,ut)|0)+(i>>>13)|0)+(Et>>>26)|0,Et&=67108863,n=Math.imul(D,j),i=(i=Math.imul(D,q))+Math.imul(H,j)|0,o=Math.imul(H,q),n=n+Math.imul(k,F)|0,i=(i=i+Math.imul(k,Z)|0)+Math.imul(U,F)|0,o=o+Math.imul(U,Z)|0,n=n+Math.imul(x,$)|0,i=(i=i+Math.imul(x,V)|0)+Math.imul(N,$)|0,o=o+Math.imul(N,V)|0,n=n+Math.imul(L,W)|0,i=(i=i+Math.imul(L,Y)|0)+Math.imul(P,W)|0,o=o+Math.imul(P,Y)|0,n=n+Math.imul(I,Q)|0,i=(i=i+Math.imul(I,tt)|0)+Math.imul(R,Q)|0,o=o+Math.imul(R,tt)|0,n=n+Math.imul(S,rt)|0,i=(i=i+Math.imul(S,nt)|0)+Math.imul(E,rt)|0,o=o+Math.imul(E,nt)|0,n=n+Math.imul(v,ot)|0,i=(i=i+Math.imul(v,st)|0)+Math.imul(w,ot)|0,o=o+Math.imul(w,st)|0,n=n+Math.imul(m,ft)|0,i=(i=i+Math.imul(m,ht)|0)+Math.imul(y,ft)|0,o=o+Math.imul(y,ht)|0,n=n+Math.imul(b,ct)|0,i=(i=i+Math.imul(b,ut)|0)+Math.imul(p,ct)|0,o=o+Math.imul(p,ut)|0;var Mt=(h+(n=n+Math.imul(c,bt)|0)|0)+((8191&(i=(i=i+Math.imul(c,pt)|0)+Math.imul(u,bt)|0))<<13)|0;h=((o=o+Math.imul(u,pt)|0)+(i>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,n=Math.imul(D,F),i=(i=Math.imul(D,Z))+Math.imul(H,F)|0,o=Math.imul(H,Z),n=n+Math.imul(k,$)|0,i=(i=i+Math.imul(k,V)|0)+Math.imul(U,$)|0,o=o+Math.imul(U,V)|0,n=n+Math.imul(x,W)|0,i=(i=i+Math.imul(x,Y)|0)+Math.imul(N,W)|0,o=o+Math.imul(N,Y)|0,n=n+Math.imul(L,Q)|0,i=(i=i+Math.imul(L,tt)|0)+Math.imul(P,Q)|0,o=o+Math.imul(P,tt)|0,n=n+Math.imul(I,rt)|0,i=(i=i+Math.imul(I,nt)|0)+Math.imul(R,rt)|0,o=o+Math.imul(R,nt)|0,n=n+Math.imul(S,ot)|0,i=(i=i+Math.imul(S,st)|0)+Math.imul(E,ot)|0,o=o+Math.imul(E,st)|0,n=n+Math.imul(v,ft)|0,i=(i=i+Math.imul(v,ht)|0)+Math.imul(w,ft)|0,o=o+Math.imul(w,ht)|0,n=n+Math.imul(m,ct)|0,i=(i=i+Math.imul(m,ut)|0)+Math.imul(y,ct)|0,o=o+Math.imul(y,ut)|0;var It=(h+(n=n+Math.imul(b,bt)|0)|0)+((8191&(i=(i=i+Math.imul(b,pt)|0)+Math.imul(p,bt)|0))<<13)|0;h=((o=o+Math.imul(p,pt)|0)+(i>>>13)|0)+(It>>>26)|0,It&=67108863,n=Math.imul(D,$),i=(i=Math.imul(D,V))+Math.imul(H,$)|0,o=Math.imul(H,V),n=n+Math.imul(k,W)|0,i=(i=i+Math.imul(k,Y)|0)+Math.imul(U,W)|0,o=o+Math.imul(U,Y)|0,n=n+Math.imul(x,Q)|0,i=(i=i+Math.imul(x,tt)|0)+Math.imul(N,Q)|0,o=o+Math.imul(N,tt)|0,n=n+Math.imul(L,rt)|0,i=(i=i+Math.imul(L,nt)|0)+Math.imul(P,rt)|0,o=o+Math.imul(P,nt)|0,n=n+Math.imul(I,ot)|0,i=(i=i+Math.imul(I,st)|0)+Math.imul(R,ot)|0,o=o+Math.imul(R,st)|0,n=n+Math.imul(S,ft)|0,i=(i=i+Math.imul(S,ht)|0)+Math.imul(E,ft)|0,o=o+Math.imul(E,ht)|0,n=n+Math.imul(v,ct)|0,i=(i=i+Math.imul(v,ut)|0)+Math.imul(w,ct)|0,o=o+Math.imul(w,ut)|0;var Rt=(h+(n=n+Math.imul(m,bt)|0)|0)+((8191&(i=(i=i+Math.imul(m,pt)|0)+Math.imul(y,bt)|0))<<13)|0;h=((o=o+Math.imul(y,pt)|0)+(i>>>13)|0)+(Rt>>>26)|0,Rt&=67108863,n=Math.imul(D,W),i=(i=Math.imul(D,Y))+Math.imul(H,W)|0,o=Math.imul(H,Y),n=n+Math.imul(k,Q)|0,i=(i=i+Math.imul(k,tt)|0)+Math.imul(U,Q)|0,o=o+Math.imul(U,tt)|0,n=n+Math.imul(x,rt)|0,i=(i=i+Math.imul(x,nt)|0)+Math.imul(N,rt)|0,o=o+Math.imul(N,nt)|0,n=n+Math.imul(L,ot)|0,i=(i=i+Math.imul(L,st)|0)+Math.imul(P,ot)|0,o=o+Math.imul(P,st)|0,n=n+Math.imul(I,ft)|0,i=(i=i+Math.imul(I,ht)|0)+Math.imul(R,ft)|0,o=o+Math.imul(R,ht)|0,n=n+Math.imul(S,ct)|0,i=(i=i+Math.imul(S,ut)|0)+Math.imul(E,ct)|0,o=o+Math.imul(E,ut)|0;var Tt=(h+(n=n+Math.imul(v,bt)|0)|0)+((8191&(i=(i=i+Math.imul(v,pt)|0)+Math.imul(w,bt)|0))<<13)|0;h=((o=o+Math.imul(w,pt)|0)+(i>>>13)|0)+(Tt>>>26)|0,Tt&=67108863,n=Math.imul(D,Q),i=(i=Math.imul(D,tt))+Math.imul(H,Q)|0,o=Math.imul(H,tt),n=n+Math.imul(k,rt)|0,i=(i=i+Math.imul(k,nt)|0)+Math.imul(U,rt)|0,o=o+Math.imul(U,nt)|0,n=n+Math.imul(x,ot)|0,i=(i=i+Math.imul(x,st)|0)+Math.imul(N,ot)|0,o=o+Math.imul(N,st)|0,n=n+Math.imul(L,ft)|0,i=(i=i+Math.imul(L,ht)|0)+Math.imul(P,ft)|0,o=o+Math.imul(P,ht)|0,n=n+Math.imul(I,ct)|0,i=(i=i+Math.imul(I,ut)|0)+Math.imul(R,ct)|0,o=o+Math.imul(R,ut)|0;var Lt=(h+(n=n+Math.imul(S,bt)|0)|0)+((8191&(i=(i=i+Math.imul(S,pt)|0)+Math.imul(E,bt)|0))<<13)|0;h=((o=o+Math.imul(E,pt)|0)+(i>>>13)|0)+(Lt>>>26)|0,Lt&=67108863,n=Math.imul(D,rt),i=(i=Math.imul(D,nt))+Math.imul(H,rt)|0,o=Math.imul(H,nt),n=n+Math.imul(k,ot)|0,i=(i=i+Math.imul(k,st)|0)+Math.imul(U,ot)|0,o=o+Math.imul(U,st)|0,n=n+Math.imul(x,ft)|0,i=(i=i+Math.imul(x,ht)|0)+Math.imul(N,ft)|0,o=o+Math.imul(N,ht)|0,n=n+Math.imul(L,ct)|0,i=(i=i+Math.imul(L,ut)|0)+Math.imul(P,ct)|0,o=o+Math.imul(P,ut)|0;var Pt=(h+(n=n+Math.imul(I,bt)|0)|0)+((8191&(i=(i=i+Math.imul(I,pt)|0)+Math.imul(R,bt)|0))<<13)|0;h=((o=o+Math.imul(R,pt)|0)+(i>>>13)|0)+(Pt>>>26)|0,Pt&=67108863,n=Math.imul(D,ot),i=(i=Math.imul(D,st))+Math.imul(H,ot)|0,o=Math.imul(H,st),n=n+Math.imul(k,ft)|0,i=(i=i+Math.imul(k,ht)|0)+Math.imul(U,ft)|0,o=o+Math.imul(U,ht)|0,n=n+Math.imul(x,ct)|0,i=(i=i+Math.imul(x,ut)|0)+Math.imul(N,ct)|0,o=o+Math.imul(N,ut)|0;var Ot=(h+(n=n+Math.imul(L,bt)|0)|0)+((8191&(i=(i=i+Math.imul(L,pt)|0)+Math.imul(P,bt)|0))<<13)|0;h=((o=o+Math.imul(P,pt)|0)+(i>>>13)|0)+(Ot>>>26)|0,Ot&=67108863,n=Math.imul(D,ft),i=(i=Math.imul(D,ht))+Math.imul(H,ft)|0,o=Math.imul(H,ht),n=n+Math.imul(k,ct)|0,i=(i=i+Math.imul(k,ut)|0)+Math.imul(U,ct)|0,o=o+Math.imul(U,ut)|0;var xt=(h+(n=n+Math.imul(x,bt)|0)|0)+((8191&(i=(i=i+Math.imul(x,pt)|0)+Math.imul(N,bt)|0))<<13)|0;h=((o=o+Math.imul(N,pt)|0)+(i>>>13)|0)+(xt>>>26)|0,xt&=67108863,n=Math.imul(D,ct),i=(i=Math.imul(D,ut))+Math.imul(H,ct)|0,o=Math.imul(H,ut);var Nt=(h+(n=n+Math.imul(k,bt)|0)|0)+((8191&(i=(i=i+Math.imul(k,pt)|0)+Math.imul(U,bt)|0))<<13)|0;h=((o=o+Math.imul(U,pt)|0)+(i>>>13)|0)+(Nt>>>26)|0,Nt&=67108863;var Bt=(h+(n=Math.imul(D,bt))|0)+((8191&(i=(i=Math.imul(D,pt))+Math.imul(H,bt)|0))<<13)|0;return h=((o=Math.imul(H,pt))+(i>>>13)|0)+(Bt>>>26)|0,Bt&=67108863,f[0]=gt,f[1]=mt,f[2]=yt,f[3]=_t,f[4]=vt,f[5]=wt,f[6]=At,f[7]=St,f[8]=Et,f[9]=Mt,f[10]=It,f[11]=Rt,f[12]=Tt,f[13]=Lt,f[14]=Pt,f[15]=Ot,f[16]=xt,f[17]=Nt,f[18]=Bt,0!==h&&(f[19]=h,r.length++),r};function p(t,e,r){return(new g).mulp(t,e,r)}function g(t,e){this.x=t,this.y=e}Math.imul||(b=l),o.prototype.mulTo=function(t,e){var r,n=this.length+t.length;return r=10===this.length&&10===t.length?b(this,t,e):n<63?l(this,t,e):n<1024?function(t,e,r){r.negative=e.negative^t.negative,r.length=t.length+e.length;for(var n=0,i=0,o=0;o>>26)|0)>>>26,s&=67108863}r.words[o]=a,n=s,s=i}return 0!==n?r.words[o]=n:r.length--,r.strip()}(this,t,e):p(this,t,e),r},g.prototype.makeRBT=function(t){for(var e=new Array(t),r=o.prototype._countBits(t)-1,n=0;n>=1;return n},g.prototype.permute=function(t,e,r,n,i,o){for(var s=0;s>>=1)i++;return 1<>>=13,r[2*s+1]=8191&o,o>>>=13;for(s=2*e;s>=26,e+=i/67108864|0,e+=o>>>26,this.words[r]=67108863&o}return 0!==e&&(this.words[r]=e,this.length++),this},o.prototype.muln=function(t){return this.clone().imuln(t)},o.prototype.sqr=function(){return this.mul(this)},o.prototype.isqr=function(){return this.imul(this.clone())},o.prototype.pow=function(t){var e=function(t){for(var e=new Array(t.bitLength()),r=0;r>>i}return e}(t);if(0===e.length)return new o(1);for(var r=this,n=0;n=0);var e,r=t%26,i=(t-r)/26,o=67108863>>>26-r<<26-r;if(0!==r){var s=0;for(e=0;e>>26-r}s&&(this.words[e]=s,this.length++)}if(0!==i){for(e=this.length-1;e>=0;e--)this.words[e+i]=this.words[e];for(e=0;e=0),i=e?(e-e%26)/26:0;var o=t%26,s=Math.min((t-o)/26,this.length),a=67108863^67108863>>>o<s)for(this.length-=s,h=0;h=0&&(0!==d||h>=i);h--){var c=0|this.words[h];this.words[h]=d<<26-o|c>>>o,d=c&a}return f&&0!==d&&(f.words[f.length++]=d),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},o.prototype.ishrn=function(t,e,r){return n(0===this.negative),this.iushrn(t,e,r)},o.prototype.shln=function(t){return this.clone().ishln(t)},o.prototype.ushln=function(t){return this.clone().iushln(t)},o.prototype.shrn=function(t){return this.clone().ishrn(t)},o.prototype.ushrn=function(t){return this.clone().iushrn(t)},o.prototype.testn=function(t){n("number"==typeof t&&t>=0);var e=t%26,r=(t-e)/26,i=1<=0);var e=t%26,r=(t-e)/26;if(n(0===this.negative,"imaskn works only with positive numbers"),this.length<=r)return this;if(0!==e&&r++,this.length=Math.min(r,this.length),0!==e){var i=67108863^67108863>>>e<=67108864;e++)this.words[e]-=67108864,e===this.length-1?this.words[e+1]=1:this.words[e+1]++;return this.length=Math.max(this.length,e+1),this},o.prototype.isubn=function(t){if(n("number"==typeof t),n(t<67108864),t<0)return this.iaddn(-t);if(0!==this.negative)return this.negative=0,this.iaddn(t),this.negative=1,this;if(this.words[0]-=t,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var e=0;e>26)-(f/67108864|0),this.words[i+r]=67108863&o}for(;i>26,this.words[i+r]=67108863&o;if(0===a)return this.strip();for(n(-1===a),a=0,i=0;i>26,this.words[i]=67108863&o;return this.negative=1,this.strip()},o.prototype._wordDiv=function(t,e){var r=(this.length,t.length),n=this.clone(),i=t,s=0|i.words[i.length-1];0!=(r=26-this._countBits(s))&&(i=i.ushln(r),n.iushln(r),s=0|i.words[i.length-1]);var a,f=n.length-i.length;if("mod"!==e){(a=new o(null)).length=f+1,a.words=new Array(a.length);for(var h=0;h=0;c--){var u=67108864*(0|n.words[i.length+c])+(0|n.words[i.length+c-1]);for(u=Math.min(u/s|0,67108863),n._ishlnsubmul(i,u,c);0!==n.negative;)u--,n.negative=0,n._ishlnsubmul(i,1,c),n.isZero()||(n.negative^=1);a&&(a.words[c]=u)}return a&&a.strip(),n.strip(),"div"!==e&&0!==r&&n.iushrn(r),{div:a||null,mod:n}},o.prototype.divmod=function(t,e,r){return n(!t.isZero()),this.isZero()?{div:new o(0),mod:new o(0)}:0!==this.negative&&0===t.negative?(a=this.neg().divmod(t,e),"mod"!==e&&(i=a.div.neg()),"div"!==e&&(s=a.mod.neg(),r&&0!==s.negative&&s.iadd(t)),{div:i,mod:s}):0===this.negative&&0!==t.negative?(a=this.divmod(t.neg(),e),"mod"!==e&&(i=a.div.neg()),{div:i,mod:a.mod}):0!=(this.negative&t.negative)?(a=this.neg().divmod(t.neg(),e),"div"!==e&&(s=a.mod.neg(),r&&0!==s.negative&&s.isub(t)),{div:a.div,mod:s}):t.length>this.length||this.cmp(t)<0?{div:new o(0),mod:this}:1===t.length?"div"===e?{div:this.divn(t.words[0]),mod:null}:"mod"===e?{div:null,mod:new o(this.modn(t.words[0]))}:{div:this.divn(t.words[0]),mod:new o(this.modn(t.words[0]))}:this._wordDiv(t,e);var i,s,a},o.prototype.div=function(t){return this.divmod(t,"div",!1).div},o.prototype.mod=function(t){return this.divmod(t,"mod",!1).mod},o.prototype.umod=function(t){return this.divmod(t,"mod",!0).mod},o.prototype.divRound=function(t){var e=this.divmod(t);if(e.mod.isZero())return e.div;var r=0!==e.div.negative?e.mod.isub(t):e.mod,n=t.ushrn(1),i=t.andln(1),o=r.cmp(n);return o<0||1===i&&0===o?e.div:0!==e.div.negative?e.div.isubn(1):e.div.iaddn(1)},o.prototype.modn=function(t){n(t<=67108863);for(var e=(1<<26)%t,r=0,i=this.length-1;i>=0;i--)r=(e*r+(0|this.words[i]))%t;return r},o.prototype.idivn=function(t){n(t<=67108863);for(var e=0,r=this.length-1;r>=0;r--){var i=(0|this.words[r])+67108864*e;this.words[r]=i/t|0,e=i%t}return this.strip()},o.prototype.divn=function(t){return this.clone().idivn(t)},o.prototype.egcd=function(t){n(0===t.negative),n(!t.isZero());var e=this,r=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var i=new o(1),s=new o(0),a=new o(0),f=new o(1),h=0;e.isEven()&&r.isEven();)e.iushrn(1),r.iushrn(1),++h;for(var d=r.clone(),c=e.clone();!e.isZero();){for(var u=0,l=1;0==(e.words[0]&l)&&u<26;++u,l<<=1);if(u>0)for(e.iushrn(u);u-- >0;)(i.isOdd()||s.isOdd())&&(i.iadd(d),s.isub(c)),i.iushrn(1),s.iushrn(1);for(var b=0,p=1;0==(r.words[0]&p)&&b<26;++b,p<<=1);if(b>0)for(r.iushrn(b);b-- >0;)(a.isOdd()||f.isOdd())&&(a.iadd(d),f.isub(c)),a.iushrn(1),f.iushrn(1);e.cmp(r)>=0?(e.isub(r),i.isub(a),s.isub(f)):(r.isub(e),a.isub(i),f.isub(s))}return{a,b:f,gcd:r.iushln(h)}},o.prototype._invmp=function(t){n(0===t.negative),n(!t.isZero());var e=this,r=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var i,s=new o(1),a=new o(0),f=r.clone();e.cmpn(1)>0&&r.cmpn(1)>0;){for(var h=0,d=1;0==(e.words[0]&d)&&h<26;++h,d<<=1);if(h>0)for(e.iushrn(h);h-- >0;)s.isOdd()&&s.iadd(f),s.iushrn(1);for(var c=0,u=1;0==(r.words[0]&u)&&c<26;++c,u<<=1);if(c>0)for(r.iushrn(c);c-- >0;)a.isOdd()&&a.iadd(f),a.iushrn(1);e.cmp(r)>=0?(e.isub(r),s.isub(a)):(r.isub(e),a.isub(s))}return(i=0===e.cmpn(1)?s:a).cmpn(0)<0&&i.iadd(t),i},o.prototype.gcd=function(t){if(this.isZero())return t.abs();if(t.isZero())return this.abs();var e=this.clone(),r=t.clone();e.negative=0,r.negative=0;for(var n=0;e.isEven()&&r.isEven();n++)e.iushrn(1),r.iushrn(1);for(;;){for(;e.isEven();)e.iushrn(1);for(;r.isEven();)r.iushrn(1);var i=e.cmp(r);if(i<0){var o=e;e=r,r=o}else if(0===i||0===r.cmpn(1))break;e.isub(r)}return r.iushln(n)},o.prototype.invm=function(t){return this.egcd(t).a.umod(t)},o.prototype.isEven=function(){return 0==(1&this.words[0])},o.prototype.isOdd=function(){return 1==(1&this.words[0])},o.prototype.andln=function(t){return this.words[0]&t},o.prototype.bincn=function(t){n("number"==typeof t);var e=t%26,r=(t-e)/26,i=1<>>26,a&=67108863,this.words[s]=a}return 0!==o&&(this.words[s]=o,this.length++),this},o.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},o.prototype.cmpn=function(t){var e,r=t<0;if(0!==this.negative&&!r)return-1;if(0===this.negative&&r)return 1;if(this.strip(),this.length>1)e=1;else{r&&(t=-t),n(t<=67108863,"Number is too big");var i=0|this.words[0];e=i===t?0:it.length)return 1;if(this.length=0;r--){var n=0|this.words[r],i=0|t.words[r];if(n!==i){ni&&(e=1);break}}return e},o.prototype.gtn=function(t){return 1===this.cmpn(t)},o.prototype.gt=function(t){return 1===this.cmp(t)},o.prototype.gten=function(t){return this.cmpn(t)>=0},o.prototype.gte=function(t){return this.cmp(t)>=0},o.prototype.ltn=function(t){return-1===this.cmpn(t)},o.prototype.lt=function(t){return-1===this.cmp(t)},o.prototype.lten=function(t){return this.cmpn(t)<=0},o.prototype.lte=function(t){return this.cmp(t)<=0},o.prototype.eqn=function(t){return 0===this.cmpn(t)},o.prototype.eq=function(t){return 0===this.cmp(t)},o.red=function(t){return new S(t)},o.prototype.toRed=function(t){return n(!this.red,"Already a number in reduction context"),n(0===this.negative,"red works only with positives"),t.convertTo(this)._forceRed(t)},o.prototype.fromRed=function(){return n(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},o.prototype._forceRed=function(t){return this.red=t,this},o.prototype.forceRed=function(t){return n(!this.red,"Already a number in reduction context"),this._forceRed(t)},o.prototype.redAdd=function(t){return n(this.red,"redAdd works only with red numbers"),this.red.add(this,t)},o.prototype.redIAdd=function(t){return n(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,t)},o.prototype.redSub=function(t){return n(this.red,"redSub works only with red numbers"),this.red.sub(this,t)},o.prototype.redISub=function(t){return n(this.red,"redISub works only with red numbers"),this.red.isub(this,t)},o.prototype.redShl=function(t){return n(this.red,"redShl works only with red numbers"),this.red.shl(this,t)},o.prototype.redMul=function(t){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.mul(this,t)},o.prototype.redIMul=function(t){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.imul(this,t)},o.prototype.redSqr=function(){return n(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},o.prototype.redISqr=function(){return n(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},o.prototype.redSqrt=function(){return n(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},o.prototype.redInvm=function(){return n(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},o.prototype.redNeg=function(){return n(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},o.prototype.redPow=function(t){return n(this.red&&!t.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,t)};var m={k256:null,p224:null,p192:null,p25519:null};function y(t,e){this.name=t,this.p=new o(e,16),this.n=this.p.bitLength(),this.k=new o(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function _(){y.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function v(){y.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function w(){y.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function A(){y.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function S(t){if("string"==typeof t){var e=o._prime(t);this.m=e.p,this.prime=e}else n(t.gtn(1),"modulus must be greater than 1"),this.m=t,this.prime=null}function E(t){S.call(this,t),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new o(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}y.prototype._tmp=function(){var t=new o(null);return t.words=new Array(Math.ceil(this.n/13)),t},y.prototype.ireduce=function(t){var e,r=t;do{this.split(r,this.tmp),e=(r=(r=this.imulK(r)).iadd(this.tmp)).bitLength()}while(e>this.n);var n=e0?r.isub(this.p):void 0!==r.strip?r.strip():r._strip(),r},y.prototype.split=function(t,e){t.iushrn(this.n,0,e)},y.prototype.imulK=function(t){return t.imul(this.k)},i(_,y),_.prototype.split=function(t,e){for(var r=4194303,n=Math.min(t.length,9),i=0;i>>22,o=s}o>>>=22,t.words[i-10]=o,0===o&&t.length>10?t.length-=10:t.length-=9},_.prototype.imulK=function(t){t.words[t.length]=0,t.words[t.length+1]=0,t.length+=2;for(var e=0,r=0;r>>=26,t.words[r]=i,e=n}return 0!==e&&(t.words[t.length++]=e),t},o._prime=function(t){if(m[t])return m[t];var e;if("k256"===t)e=new _;else if("p224"===t)e=new v;else if("p192"===t)e=new w;else{if("p25519"!==t)throw new Error("Unknown prime "+t);e=new A}return m[t]=e,e},S.prototype._verify1=function(t){n(0===t.negative,"red works only with positives"),n(t.red,"red works only with red numbers")},S.prototype._verify2=function(t,e){n(0==(t.negative|e.negative),"red works only with positives"),n(t.red&&t.red===e.red,"red works only with red numbers")},S.prototype.imod=function(t){return this.prime?this.prime.ireduce(t)._forceRed(this):t.umod(this.m)._forceRed(this)},S.prototype.neg=function(t){return t.isZero()?t.clone():this.m.sub(t)._forceRed(this)},S.prototype.add=function(t,e){this._verify2(t,e);var r=t.add(e);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},S.prototype.iadd=function(t,e){this._verify2(t,e);var r=t.iadd(e);return r.cmp(this.m)>=0&&r.isub(this.m),r},S.prototype.sub=function(t,e){this._verify2(t,e);var r=t.sub(e);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},S.prototype.isub=function(t,e){this._verify2(t,e);var r=t.isub(e);return r.cmpn(0)<0&&r.iadd(this.m),r},S.prototype.shl=function(t,e){return this._verify1(t),this.imod(t.ushln(e))},S.prototype.imul=function(t,e){return this._verify2(t,e),this.imod(t.imul(e))},S.prototype.mul=function(t,e){return this._verify2(t,e),this.imod(t.mul(e))},S.prototype.isqr=function(t){return this.imul(t,t.clone())},S.prototype.sqr=function(t){return this.mul(t,t)},S.prototype.sqrt=function(t){if(t.isZero())return t.clone();var e=this.m.andln(3);if(n(e%2==1),3===e){var r=this.m.add(new o(1)).iushrn(2);return this.pow(t,r)}for(var i=this.m.subn(1),s=0;!i.isZero()&&0===i.andln(1);)s++,i.iushrn(1);n(!i.isZero());var a=new o(1).toRed(this),f=a.redNeg(),h=this.m.subn(1).iushrn(1),d=this.m.bitLength();for(d=new o(2*d*d).toRed(this);0!==this.pow(d,h).cmp(f);)d.redIAdd(f);for(var c=this.pow(d,i),u=this.pow(t,i.addn(1).iushrn(1)),l=this.pow(t,i),b=s;0!==l.cmp(a);){for(var p=l,g=0;0!==p.cmp(a);g++)p=p.redSqr();n(g=0;n--){for(var h=e.words[n],d=f-1;d>=0;d--){var c=h>>d&1;i!==r[0]&&(i=this.sqr(i)),0!==c||0!==s?(s<<=1,s|=c,(4==++a||0===n&&0===d)&&(i=this.mul(i,r[s]),a=0,s=0)):a=0}f=26}return i},S.prototype.convertTo=function(t){var e=t.umod(this.m);return e===t?e.clone():e},S.prototype.convertFrom=function(t){var e=t.clone();return e.red=null,e},o.mont=function(t){return new E(t)},i(E,S),E.prototype.convertTo=function(t){return this.imod(t.ushln(this.shift))},E.prototype.convertFrom=function(t){var e=this.imod(t.mul(this.rinv));return e.red=null,e},E.prototype.imul=function(t,e){if(t.isZero()||e.isZero())return t.words[0]=0,t.length=1,t;var r=t.imul(e),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),o=i;return i.cmp(this.m)>=0?o=i.isub(this.m):i.cmpn(0)<0&&(o=i.iadd(this.m)),o._forceRed(this)},E.prototype.mul=function(t,e){if(t.isZero()||e.isZero())return new o(0)._forceRed(this);var r=t.mul(e),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),s=i;return i.cmp(this.m)>=0?s=i.isub(this.m):i.cmpn(0)<0&&(s=i.iadd(this.m)),s._forceRed(this)},E.prototype.invm=function(t){return this.imod(t._invmp(this.m).mul(this.r2))._forceRed(this)}}(t=r.nmd(t),this)},2745:(t,e,r)=>{var n;function i(t){this.rand=t}if(t.exports=function(t){return n||(n=new i(null)),n.generate(t)},t.exports.Rand=i,i.prototype.generate=function(t){return this._rand(t)},i.prototype._rand=function(t){if(this.rand.getBytes)return this.rand.getBytes(t);for(var e=new Uint8Array(t),r=0;r{var n=r(8166);t.exports=n("123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz")},8616:(t,e,r)=>{"use strict";var n=r(7022),i=r(7834).Buffer;t.exports=function(t){function e(e){var r=e.slice(0,-4),n=e.slice(-4),i=t(r);if(!(n[0]^i[0]|n[1]^i[1]|n[2]^i[2]|n[3]^i[3]))return r}return{encode:function(e){var r=t(e);return n.encode(i.concat([e,r],e.length+4))},decode:function(t){var r=e(n.decode(t));if(!r)throw new Error("Invalid checksum");return r},decodeUnsafe:function(t){var r=n.decodeUnsafe(t);if(r)return e(r)}}}},4075:(t,e,r)=>{"use strict";var n=r(6162),i=r(8616);t.exports=i((function(t){var e=n("sha256").update(t).digest();return n("sha256").update(e).digest()}))},8834:(t,e,r)=>{"use strict";const n=r(5766),i=r(2333),o="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;e.Buffer=f,e.SlowBuffer=function(t){return+t!=t&&(t=0),f.alloc(+t)},e.INSPECT_MAX_BYTES=50;const s=2147483647;function a(t){if(t>s)throw new RangeError('The value "'+t+'" is invalid for option "size"');const e=new Uint8Array(t);return Object.setPrototypeOf(e,f.prototype),e}function f(t,e,r){if("number"==typeof t){if("string"==typeof e)throw new TypeError('The "string" argument must be of type string. Received type number');return c(t)}return h(t,e,r)}function h(t,e,r){if("string"==typeof t)return function(t,e){if("string"==typeof e&&""!==e||(e="utf8"),!f.isEncoding(e))throw new TypeError("Unknown encoding: "+e);const r=0|p(t,e);let n=a(r);const i=n.write(t,e);return i!==r&&(n=n.slice(0,i)),n}(t,e);if(ArrayBuffer.isView(t))return function(t){if(X(t,Uint8Array)){const e=new Uint8Array(t);return l(e.buffer,e.byteOffset,e.byteLength)}return u(t)}(t);if(null==t)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t);if(X(t,ArrayBuffer)||t&&X(t.buffer,ArrayBuffer))return l(t,e,r);if("undefined"!=typeof SharedArrayBuffer&&(X(t,SharedArrayBuffer)||t&&X(t.buffer,SharedArrayBuffer)))return l(t,e,r);if("number"==typeof t)throw new TypeError('The "value" argument must not be of type number. Received type number');const n=t.valueOf&&t.valueOf();if(null!=n&&n!==t)return f.from(n,e,r);const i=function(t){if(f.isBuffer(t)){const e=0|b(t.length),r=a(e);return 0===r.length||t.copy(r,0,0,e),r}return void 0!==t.length?"number"!=typeof t.length||W(t.length)?a(0):u(t):"Buffer"===t.type&&Array.isArray(t.data)?u(t.data):void 0}(t);if(i)return i;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof t[Symbol.toPrimitive])return f.from(t[Symbol.toPrimitive]("string"),e,r);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t)}function d(t){if("number"!=typeof t)throw new TypeError('"size" argument must be of type number');if(t<0)throw new RangeError('The value "'+t+'" is invalid for option "size"')}function c(t){return d(t),a(t<0?0:0|b(t))}function u(t){const e=t.length<0?0:0|b(t.length),r=a(e);for(let n=0;n=s)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+s.toString(16)+" bytes");return 0|t}function p(t,e){if(f.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||X(t,ArrayBuffer))return t.byteLength;if("string"!=typeof t)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof t);const r=t.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;let i=!1;for(;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return G(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return $(t).length;default:if(i)return n?-1:G(t).length;e=(""+e).toLowerCase(),i=!0}}function g(t,e,r){let n=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return P(this,e,r);case"utf8":case"utf-8":return I(this,e,r);case"ascii":return T(this,e,r);case"latin1":case"binary":return L(this,e,r);case"base64":return M(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return O(this,e,r);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function m(t,e,r){const n=t[e];t[e]=t[r],t[r]=n}function y(t,e,r,n,i){if(0===t.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),W(r=+r)&&(r=i?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(i)return-1;r=t.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof e&&(e=f.from(e,n)),f.isBuffer(e))return 0===e.length?-1:_(t,e,r,n,i);if("number"==typeof e)return e&=255,"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):_(t,[e],r,n,i);throw new TypeError("val must be string, number or Buffer")}function _(t,e,r,n,i){let o,s=1,a=t.length,f=e.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;s=2,a/=2,f/=2,r/=2}function h(t,e){return 1===s?t[e]:t.readUInt16BE(e*s)}if(i){let n=-1;for(o=r;oa&&(r=a-f),o=r;o>=0;o--){let r=!0;for(let n=0;ni&&(n=i):n=i;const o=e.length;let s;for(n>o/2&&(n=o/2),s=0;s>8,i=r%256,o.push(i),o.push(n);return o}(e,t.length-r),t,r,n)}function M(t,e,r){return 0===e&&r===t.length?n.fromByteArray(t):n.fromByteArray(t.slice(e,r))}function I(t,e,r){r=Math.min(t.length,r);const n=[];let i=e;for(;i239?4:e>223?3:e>191?2:1;if(i+s<=r){let r,n,a,f;switch(s){case 1:e<128&&(o=e);break;case 2:r=t[i+1],128==(192&r)&&(f=(31&e)<<6|63&r,f>127&&(o=f));break;case 3:r=t[i+1],n=t[i+2],128==(192&r)&&128==(192&n)&&(f=(15&e)<<12|(63&r)<<6|63&n,f>2047&&(f<55296||f>57343)&&(o=f));break;case 4:r=t[i+1],n=t[i+2],a=t[i+3],128==(192&r)&&128==(192&n)&&128==(192&a)&&(f=(15&e)<<18|(63&r)<<12|(63&n)<<6|63&a,f>65535&&f<1114112&&(o=f))}}null===o?(o=65533,s=1):o>65535&&(o-=65536,n.push(o>>>10&1023|55296),o=56320|1023&o),n.push(o),i+=s}return function(t){const e=t.length;if(e<=R)return String.fromCharCode.apply(String,t);let r="",n=0;for(;nn.length?(f.isBuffer(e)||(e=f.from(e)),e.copy(n,i)):Uint8Array.prototype.set.call(n,e,i);else{if(!f.isBuffer(e))throw new TypeError('"list" argument must be an Array of Buffers');e.copy(n,i)}i+=e.length}return n},f.byteLength=p,f.prototype._isBuffer=!0,f.prototype.swap16=function(){const t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let e=0;er&&(t+=" ... "),""},o&&(f.prototype[o]=f.prototype.inspect),f.prototype.compare=function(t,e,r,n,i){if(X(t,Uint8Array)&&(t=f.from(t,t.offset,t.byteLength)),!f.isBuffer(t))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof t);if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),e<0||r>t.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&e>=r)return 0;if(n>=i)return-1;if(e>=r)return 1;if(this===t)return 0;let o=(i>>>=0)-(n>>>=0),s=(r>>>=0)-(e>>>=0);const a=Math.min(o,s),h=this.slice(n,i),d=t.slice(e,r);for(let t=0;t>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}const i=this.length-e;if((void 0===r||r>i)&&(r=i),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");let o=!1;for(;;)switch(n){case"hex":return v(this,t,e,r);case"utf8":case"utf-8":return w(this,t,e,r);case"ascii":case"latin1":case"binary":return A(this,t,e,r);case"base64":return S(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return E(this,t,e,r);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},f.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};const R=4096;function T(t,e,r){let n="";r=Math.min(t.length,r);for(let i=e;in)&&(r=n);let i="";for(let n=e;nr)throw new RangeError("Trying to access beyond buffer length")}function N(t,e,r,n,i,o){if(!f.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||et.length)throw new RangeError("Index out of range")}function B(t,e,r,n,i){q(e,n,i,t,r,7);let o=Number(e&BigInt(4294967295));t[r++]=o,o>>=8,t[r++]=o,o>>=8,t[r++]=o,o>>=8,t[r++]=o;let s=Number(e>>BigInt(32)&BigInt(4294967295));return t[r++]=s,s>>=8,t[r++]=s,s>>=8,t[r++]=s,s>>=8,t[r++]=s,r}function k(t,e,r,n,i){q(e,n,i,t,r,7);let o=Number(e&BigInt(4294967295));t[r+7]=o,o>>=8,t[r+6]=o,o>>=8,t[r+5]=o,o>>=8,t[r+4]=o;let s=Number(e>>BigInt(32)&BigInt(4294967295));return t[r+3]=s,s>>=8,t[r+2]=s,s>>=8,t[r+1]=s,s>>=8,t[r]=s,r+8}function U(t,e,r,n,i,o){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function C(t,e,r,n,o){return e=+e,r>>>=0,o||U(t,0,r,4),i.write(t,e,r,n,23,4),r+4}function D(t,e,r,n,o){return e=+e,r>>>=0,o||U(t,0,r,8),i.write(t,e,r,n,52,8),r+8}f.prototype.slice=function(t,e){const r=this.length;(t=~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),(e=void 0===e?r:~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),e>>=0,e>>>=0,r||x(t,e,this.length);let n=this[t],i=1,o=0;for(;++o>>=0,e>>>=0,r||x(t,e,this.length);let n=this[t+--e],i=1;for(;e>0&&(i*=256);)n+=this[t+--e]*i;return n},f.prototype.readUint8=f.prototype.readUInt8=function(t,e){return t>>>=0,e||x(t,1,this.length),this[t]},f.prototype.readUint16LE=f.prototype.readUInt16LE=function(t,e){return t>>>=0,e||x(t,2,this.length),this[t]|this[t+1]<<8},f.prototype.readUint16BE=f.prototype.readUInt16BE=function(t,e){return t>>>=0,e||x(t,2,this.length),this[t]<<8|this[t+1]},f.prototype.readUint32LE=f.prototype.readUInt32LE=function(t,e){return t>>>=0,e||x(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},f.prototype.readUint32BE=f.prototype.readUInt32BE=function(t,e){return t>>>=0,e||x(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},f.prototype.readBigUInt64LE=J((function(t){K(t>>>=0,"offset");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||F(t,this.length-8);const n=e+256*this[++t]+65536*this[++t]+this[++t]*2**24,i=this[++t]+256*this[++t]+65536*this[++t]+r*2**24;return BigInt(n)+(BigInt(i)<>>=0,"offset");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||F(t,this.length-8);const n=e*2**24+65536*this[++t]+256*this[++t]+this[++t],i=this[++t]*2**24+65536*this[++t]+256*this[++t]+r;return(BigInt(n)<>>=0,e>>>=0,r||x(t,e,this.length);let n=this[t],i=1,o=0;for(;++o=i&&(n-=Math.pow(2,8*e)),n},f.prototype.readIntBE=function(t,e,r){t>>>=0,e>>>=0,r||x(t,e,this.length);let n=e,i=1,o=this[t+--n];for(;n>0&&(i*=256);)o+=this[t+--n]*i;return i*=128,o>=i&&(o-=Math.pow(2,8*e)),o},f.prototype.readInt8=function(t,e){return t>>>=0,e||x(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},f.prototype.readInt16LE=function(t,e){t>>>=0,e||x(t,2,this.length);const r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},f.prototype.readInt16BE=function(t,e){t>>>=0,e||x(t,2,this.length);const r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},f.prototype.readInt32LE=function(t,e){return t>>>=0,e||x(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},f.prototype.readInt32BE=function(t,e){return t>>>=0,e||x(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},f.prototype.readBigInt64LE=J((function(t){K(t>>>=0,"offset");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||F(t,this.length-8);const n=this[t+4]+256*this[t+5]+65536*this[t+6]+(r<<24);return(BigInt(n)<>>=0,"offset");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||F(t,this.length-8);const n=(e<<24)+65536*this[++t]+256*this[++t]+this[++t];return(BigInt(n)<>>=0,e||x(t,4,this.length),i.read(this,t,!0,23,4)},f.prototype.readFloatBE=function(t,e){return t>>>=0,e||x(t,4,this.length),i.read(this,t,!1,23,4)},f.prototype.readDoubleLE=function(t,e){return t>>>=0,e||x(t,8,this.length),i.read(this,t,!0,52,8)},f.prototype.readDoubleBE=function(t,e){return t>>>=0,e||x(t,8,this.length),i.read(this,t,!1,52,8)},f.prototype.writeUintLE=f.prototype.writeUIntLE=function(t,e,r,n){t=+t,e>>>=0,r>>>=0,n||N(this,t,e,r,Math.pow(2,8*r)-1,0);let i=1,o=0;for(this[e]=255&t;++o>>=0,r>>>=0,n||N(this,t,e,r,Math.pow(2,8*r)-1,0);let i=r-1,o=1;for(this[e+i]=255&t;--i>=0&&(o*=256);)this[e+i]=t/o&255;return e+r},f.prototype.writeUint8=f.prototype.writeUInt8=function(t,e,r){return t=+t,e>>>=0,r||N(this,t,e,1,255,0),this[e]=255&t,e+1},f.prototype.writeUint16LE=f.prototype.writeUInt16LE=function(t,e,r){return t=+t,e>>>=0,r||N(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},f.prototype.writeUint16BE=f.prototype.writeUInt16BE=function(t,e,r){return t=+t,e>>>=0,r||N(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},f.prototype.writeUint32LE=f.prototype.writeUInt32LE=function(t,e,r){return t=+t,e>>>=0,r||N(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},f.prototype.writeUint32BE=f.prototype.writeUInt32BE=function(t,e,r){return t=+t,e>>>=0,r||N(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},f.prototype.writeBigUInt64LE=J((function(t,e=0){return B(this,t,e,BigInt(0),BigInt("0xffffffffffffffff"))})),f.prototype.writeBigUInt64BE=J((function(t,e=0){return k(this,t,e,BigInt(0),BigInt("0xffffffffffffffff"))})),f.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e>>>=0,!n){const n=Math.pow(2,8*r-1);N(this,t,e,r,n-1,-n)}let i=0,o=1,s=0;for(this[e]=255&t;++i>0)-s&255;return e+r},f.prototype.writeIntBE=function(t,e,r,n){if(t=+t,e>>>=0,!n){const n=Math.pow(2,8*r-1);N(this,t,e,r,n-1,-n)}let i=r-1,o=1,s=0;for(this[e+i]=255&t;--i>=0&&(o*=256);)t<0&&0===s&&0!==this[e+i+1]&&(s=1),this[e+i]=(t/o>>0)-s&255;return e+r},f.prototype.writeInt8=function(t,e,r){return t=+t,e>>>=0,r||N(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},f.prototype.writeInt16LE=function(t,e,r){return t=+t,e>>>=0,r||N(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},f.prototype.writeInt16BE=function(t,e,r){return t=+t,e>>>=0,r||N(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},f.prototype.writeInt32LE=function(t,e,r){return t=+t,e>>>=0,r||N(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},f.prototype.writeInt32BE=function(t,e,r){return t=+t,e>>>=0,r||N(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},f.prototype.writeBigInt64LE=J((function(t,e=0){return B(this,t,e,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),f.prototype.writeBigInt64BE=J((function(t,e=0){return k(this,t,e,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),f.prototype.writeFloatLE=function(t,e,r){return C(this,t,e,!0,r)},f.prototype.writeFloatBE=function(t,e,r){return C(this,t,e,!1,r)},f.prototype.writeDoubleLE=function(t,e,r){return D(this,t,e,!0,r)},f.prototype.writeDoubleBE=function(t,e,r){return D(this,t,e,!1,r)},f.prototype.copy=function(t,e,r,n){if(!f.isBuffer(t))throw new TypeError("argument should be a Buffer");if(r||(r=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&n=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-e>>=0,r=void 0===r?this.length:r>>>0,t||(t=0),"number"==typeof t)for(i=e;i=n+4;r-=3)e=`_${t.slice(r-3,r)}${e}`;return`${t.slice(0,r)}${e}`}function q(t,e,r,n,i,o){if(t>r||t3?0===e||e===BigInt(0)?`>= 0${n} and < 2${n} ** ${8*(o+1)}${n}`:`>= -(2${n} ** ${8*(o+1)-1}${n}) and < 2 ** ${8*(o+1)-1}${n}`:`>= ${e}${n} and <= ${r}${n}`,new H.ERR_OUT_OF_RANGE("value",i,t)}!function(t,e,r){K(e,"offset"),void 0!==t[e]&&void 0!==t[e+r]||F(e,t.length-(r+1))}(n,i,o)}function K(t,e){if("number"!=typeof t)throw new H.ERR_INVALID_ARG_TYPE(e,"number",t)}function F(t,e,r){if(Math.floor(t)!==t)throw K(t,r),new H.ERR_OUT_OF_RANGE(r||"offset","an integer",t);if(e<0)throw new H.ERR_BUFFER_OUT_OF_BOUNDS;throw new H.ERR_OUT_OF_RANGE(r||"offset",`>= ${r?1:0} and <= ${e}`,t)}z("ERR_BUFFER_OUT_OF_BOUNDS",(function(t){return t?`${t} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"}),RangeError),z("ERR_INVALID_ARG_TYPE",(function(t,e){return`The "${t}" argument must be of type number. Received type ${typeof e}`}),TypeError),z("ERR_OUT_OF_RANGE",(function(t,e,r){let n=`The value of "${t}" is out of range.`,i=r;return Number.isInteger(r)&&Math.abs(r)>2**32?i=j(String(r)):"bigint"==typeof r&&(i=String(r),(r>BigInt(2)**BigInt(32)||r<-(BigInt(2)**BigInt(32)))&&(i=j(i)),i+="n"),n+=` It must be ${e}. Received ${i}`,n}),RangeError);const Z=/[^+/0-9A-Za-z-_]/g;function G(t,e){let r;e=e||1/0;const n=t.length;let i=null;const o=[];for(let s=0;s55295&&r<57344){if(!i){if(r>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(s+1===n){(e-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(e-=3)>-1&&o.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((e-=1)<0)break;o.push(r)}else if(r<2048){if((e-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function $(t){return n.toByteArray(function(t){if((t=(t=t.split("=")[0]).trim().replace(Z,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function V(t,e,r,n){let i;for(i=0;i=e.length||i>=t.length);++i)e[i+r]=t[i];return i}function X(t,e){return t instanceof e||null!=t&&null!=t.constructor&&null!=t.constructor.name&&t.constructor.name===e.name}function W(t){return t!=t}const Y=function(){const t="0123456789abcdef",e=new Array(256);for(let r=0;r<16;++r){const n=16*r;for(let i=0;i<16;++i)e[n+i]=t[r]+t[i]}return e}();function J(t){return"undefined"==typeof BigInt?Q:t}function Q(){throw new Error("BigInt not supported")}},3973:(t,e,r)=>{var n=r(7834).Buffer,i=r(4851).Transform,o=r(214).s;function s(t){i.call(this),this.hashMode="string"==typeof t,this.hashMode?this[t]=this._finalOrDigest:this.final=this._finalOrDigest,this._final&&(this.__final=this._final,this._final=null),this._decoder=null,this._encoding=null}r(1285)(s,i),s.prototype.update=function(t,e,r){"string"==typeof t&&(t=n.from(t,e));var i=this._update(t);return this.hashMode?this:(r&&(i=this._toString(i,r)),i)},s.prototype.setAutoPadding=function(){},s.prototype.getAuthTag=function(){throw new Error("trying to get auth tag in unsupported state")},s.prototype.setAuthTag=function(){throw new Error("trying to set auth tag in unsupported state")},s.prototype.setAAD=function(){throw new Error("trying to set aad in unsupported state")},s.prototype._transform=function(t,e,r){var n;try{this.hashMode?this._update(t):this.push(this._update(t))}catch(t){n=t}finally{r(n)}},s.prototype._flush=function(t){var e;try{this.push(this.__final())}catch(t){e=t}t(e)},s.prototype._finalOrDigest=function(t){var e=this.__final()||n.alloc(0);return t&&(e=this._toString(e,t,!0)),e},s.prototype._toString=function(t,e,r){if(this._decoder||(this._decoder=new o(e),this._encoding=e),this._encoding!==e)throw new Error("can't switch encodings");var n=this._decoder.write(t);return r&&(n+=this._decoder.end()),n},t.exports=s},6162:(t,e,r)=>{"use strict";var n=r(1285),i=r(7993),o=r(1445),s=r(9065),a=r(3973);function f(t){a.call(this,"digest"),this._hash=t}n(f,a),f.prototype._update=function(t){this._hash.update(t)},f.prototype._final=function(){return this._hash.digest()},t.exports=function(t){return"md5"===(t=t.toLowerCase())?new i:"rmd160"===t||"ripemd160"===t?new o:new f(s(t))}},7554:(t,e,r)=>{"use strict";var n=e;n.version=r(763).i8,n.utils=r(8288),n.rand=r(2745),n.curve=r(8610),n.curves=r(1479),n.ec=r(8596),n.eddsa=r(9208)},8919:(t,e,r)=>{"use strict";var n=r(2197),i=r(8288),o=i.getNAF,s=i.getJSF,a=i.assert;function f(t,e){this.type=t,this.p=new n(e.p,16),this.red=e.prime?n.red(e.prime):n.mont(this.p),this.zero=new n(0).toRed(this.red),this.one=new n(1).toRed(this.red),this.two=new n(2).toRed(this.red),this.n=e.n&&new n(e.n,16),this.g=e.g&&this.pointFromJSON(e.g,e.gRed),this._wnafT1=new Array(4),this._wnafT2=new Array(4),this._wnafT3=new Array(4),this._wnafT4=new Array(4),this._bitLength=this.n?this.n.bitLength():0;var r=this.n&&this.p.div(this.n);!r||r.cmpn(100)>0?this.redN=null:(this._maxwellTrick=!0,this.redN=this.n.toRed(this.red))}function h(t,e){this.curve=t,this.type=e,this.precomputed=null}t.exports=f,f.prototype.point=function(){throw new Error("Not implemented")},f.prototype.validate=function(){throw new Error("Not implemented")},f.prototype._fixedNafMul=function(t,e){a(t.precomputed);var r=t._getDoubles(),n=o(e,1,this._bitLength),i=(1<=s;d--)f=(f<<1)+n[d];h.push(f)}for(var c=this.jpoint(null,null,null),u=this.jpoint(null,null,null),l=i;l>0;l--){for(s=0;s=0;h--){for(var d=0;h>=0&&0===s[h];h--)d++;if(h>=0&&d++,f=f.dblp(d),h<0)break;var c=s[h];a(0!==c),f="affine"===t.type?c>0?f.mixedAdd(i[c-1>>1]):f.mixedAdd(i[-c-1>>1].neg()):c>0?f.add(i[c-1>>1]):f.add(i[-c-1>>1].neg())}return"affine"===t.type?f.toP():f},f.prototype._wnafMulAdd=function(t,e,r,n,i){var a,f,h,d=this._wnafT1,c=this._wnafT2,u=this._wnafT3,l=0;for(a=0;a=1;a-=2){var p=a-1,g=a;if(1===d[p]&&1===d[g]){var m=[e[p],null,null,e[g]];0===e[p].y.cmp(e[g].y)?(m[1]=e[p].add(e[g]),m[2]=e[p].toJ().mixedAdd(e[g].neg())):0===e[p].y.cmp(e[g].y.redNeg())?(m[1]=e[p].toJ().mixedAdd(e[g]),m[2]=e[p].add(e[g].neg())):(m[1]=e[p].toJ().mixedAdd(e[g]),m[2]=e[p].toJ().mixedAdd(e[g].neg()));var y=[-3,-1,-5,-7,0,7,5,1,3],_=s(r[p],r[g]);for(l=Math.max(_[0].length,l),u[p]=new Array(l),u[g]=new Array(l),f=0;f=0;a--){for(var E=0;a>=0;){var M=!0;for(f=0;f=0&&E++,A=A.dblp(E),a<0)break;for(f=0;f0?h=c[f][I-1>>1]:I<0&&(h=c[f][-I-1>>1].neg()),A="affine"===h.type?A.mixedAdd(h):A.add(h))}}for(a=0;a=Math.ceil((t.bitLength()+1)/e.step)},h.prototype._getDoubles=function(t,e){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var r=[this],n=this,i=0;i{"use strict";var n=r(8288),i=r(2197),o=r(1285),s=r(8919),a=n.assert;function f(t){this.twisted=1!=(0|t.a),this.mOneA=this.twisted&&-1==(0|t.a),this.extended=this.mOneA,s.call(this,"edwards",t),this.a=new i(t.a,16).umod(this.red.m),this.a=this.a.toRed(this.red),this.c=new i(t.c,16).toRed(this.red),this.c2=this.c.redSqr(),this.d=new i(t.d,16).toRed(this.red),this.dd=this.d.redAdd(this.d),a(!this.twisted||0===this.c.fromRed().cmpn(1)),this.oneC=1==(0|t.c)}function h(t,e,r,n,o){s.BasePoint.call(this,t,"projective"),null===e&&null===r&&null===n?(this.x=this.curve.zero,this.y=this.curve.one,this.z=this.curve.one,this.t=this.curve.zero,this.zOne=!0):(this.x=new i(e,16),this.y=new i(r,16),this.z=n?new i(n,16):this.curve.one,this.t=o&&new i(o,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.t&&!this.t.red&&(this.t=this.t.toRed(this.curve.red)),this.zOne=this.z===this.curve.one,this.curve.extended&&!this.t&&(this.t=this.x.redMul(this.y),this.zOne||(this.t=this.t.redMul(this.z.redInvm()))))}o(f,s),t.exports=f,f.prototype._mulA=function(t){return this.mOneA?t.redNeg():this.a.redMul(t)},f.prototype._mulC=function(t){return this.oneC?t:this.c.redMul(t)},f.prototype.jpoint=function(t,e,r,n){return this.point(t,e,r,n)},f.prototype.pointFromX=function(t,e){(t=new i(t,16)).red||(t=t.toRed(this.red));var r=t.redSqr(),n=this.c2.redSub(this.a.redMul(r)),o=this.one.redSub(this.c2.redMul(this.d).redMul(r)),s=n.redMul(o.redInvm()),a=s.redSqrt();if(0!==a.redSqr().redSub(s).cmp(this.zero))throw new Error("invalid point");var f=a.fromRed().isOdd();return(e&&!f||!e&&f)&&(a=a.redNeg()),this.point(t,a)},f.prototype.pointFromY=function(t,e){(t=new i(t,16)).red||(t=t.toRed(this.red));var r=t.redSqr(),n=r.redSub(this.c2),o=r.redMul(this.d).redMul(this.c2).redSub(this.a),s=n.redMul(o.redInvm());if(0===s.cmp(this.zero)){if(e)throw new Error("invalid point");return this.point(this.zero,t)}var a=s.redSqrt();if(0!==a.redSqr().redSub(s).cmp(this.zero))throw new Error("invalid point");return a.fromRed().isOdd()!==e&&(a=a.redNeg()),this.point(a,t)},f.prototype.validate=function(t){if(t.isInfinity())return!0;t.normalize();var e=t.x.redSqr(),r=t.y.redSqr(),n=e.redMul(this.a).redAdd(r),i=this.c2.redMul(this.one.redAdd(this.d.redMul(e).redMul(r)));return 0===n.cmp(i)},o(h,s.BasePoint),f.prototype.pointFromJSON=function(t){return h.fromJSON(this,t)},f.prototype.point=function(t,e,r,n){return new h(this,t,e,r,n)},h.fromJSON=function(t,e){return new h(t,e[0],e[1],e[2])},h.prototype.inspect=function(){return this.isInfinity()?"":""},h.prototype.isInfinity=function(){return 0===this.x.cmpn(0)&&(0===this.y.cmp(this.z)||this.zOne&&0===this.y.cmp(this.curve.c))},h.prototype._extDbl=function(){var t=this.x.redSqr(),e=this.y.redSqr(),r=this.z.redSqr();r=r.redIAdd(r);var n=this.curve._mulA(t),i=this.x.redAdd(this.y).redSqr().redISub(t).redISub(e),o=n.redAdd(e),s=o.redSub(r),a=n.redSub(e),f=i.redMul(s),h=o.redMul(a),d=i.redMul(a),c=s.redMul(o);return this.curve.point(f,h,c,d)},h.prototype._projDbl=function(){var t,e,r,n,i,o,s=this.x.redAdd(this.y).redSqr(),a=this.x.redSqr(),f=this.y.redSqr();if(this.curve.twisted){var h=(n=this.curve._mulA(a)).redAdd(f);this.zOne?(t=s.redSub(a).redSub(f).redMul(h.redSub(this.curve.two)),e=h.redMul(n.redSub(f)),r=h.redSqr().redSub(h).redSub(h)):(i=this.z.redSqr(),o=h.redSub(i).redISub(i),t=s.redSub(a).redISub(f).redMul(o),e=h.redMul(n.redSub(f)),r=h.redMul(o))}else n=a.redAdd(f),i=this.curve._mulC(this.z).redSqr(),o=n.redSub(i).redSub(i),t=this.curve._mulC(s.redISub(n)).redMul(o),e=this.curve._mulC(n).redMul(a.redISub(f)),r=n.redMul(o);return this.curve.point(t,e,r)},h.prototype.dbl=function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},h.prototype._extAdd=function(t){var e=this.y.redSub(this.x).redMul(t.y.redSub(t.x)),r=this.y.redAdd(this.x).redMul(t.y.redAdd(t.x)),n=this.t.redMul(this.curve.dd).redMul(t.t),i=this.z.redMul(t.z.redAdd(t.z)),o=r.redSub(e),s=i.redSub(n),a=i.redAdd(n),f=r.redAdd(e),h=o.redMul(s),d=a.redMul(f),c=o.redMul(f),u=s.redMul(a);return this.curve.point(h,d,u,c)},h.prototype._projAdd=function(t){var e,r,n=this.z.redMul(t.z),i=n.redSqr(),o=this.x.redMul(t.x),s=this.y.redMul(t.y),a=this.curve.d.redMul(o).redMul(s),f=i.redSub(a),h=i.redAdd(a),d=this.x.redAdd(this.y).redMul(t.x.redAdd(t.y)).redISub(o).redISub(s),c=n.redMul(f).redMul(d);return this.curve.twisted?(e=n.redMul(h).redMul(s.redSub(this.curve._mulA(o))),r=f.redMul(h)):(e=n.redMul(h).redMul(s.redSub(o)),r=this.curve._mulC(f).redMul(h)),this.curve.point(c,e,r)},h.prototype.add=function(t){return this.isInfinity()?t:t.isInfinity()?this:this.curve.extended?this._extAdd(t):this._projAdd(t)},h.prototype.mul=function(t){return this._hasDoubles(t)?this.curve._fixedNafMul(this,t):this.curve._wnafMul(this,t)},h.prototype.mulAdd=function(t,e,r){return this.curve._wnafMulAdd(1,[this,e],[t,r],2,!1)},h.prototype.jmulAdd=function(t,e,r){return this.curve._wnafMulAdd(1,[this,e],[t,r],2,!0)},h.prototype.normalize=function(){if(this.zOne)return this;var t=this.z.redInvm();return this.x=this.x.redMul(t),this.y=this.y.redMul(t),this.t&&(this.t=this.t.redMul(t)),this.z=this.curve.one,this.zOne=!0,this},h.prototype.neg=function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},h.prototype.getX=function(){return this.normalize(),this.x.fromRed()},h.prototype.getY=function(){return this.normalize(),this.y.fromRed()},h.prototype.eq=function(t){return this===t||0===this.getX().cmp(t.getX())&&0===this.getY().cmp(t.getY())},h.prototype.eqXToP=function(t){var e=t.toRed(this.curve.red).redMul(this.z);if(0===this.x.cmp(e))return!0;for(var r=t.clone(),n=this.curve.redN.redMul(this.z);;){if(r.iadd(this.curve.n),r.cmp(this.curve.p)>=0)return!1;if(e.redIAdd(n),0===this.x.cmp(e))return!0}},h.prototype.toP=h.prototype.normalize,h.prototype.mixedAdd=h.prototype.add},8610:(t,e,r)=>{"use strict";var n=e;n.base=r(8919),n.short=r(7715),n.mont=r(5125),n.edwards=r(7105)},5125:(t,e,r)=>{"use strict";var n=r(2197),i=r(1285),o=r(8919),s=r(8288);function a(t){o.call(this,"mont",t),this.a=new n(t.a,16).toRed(this.red),this.b=new n(t.b,16).toRed(this.red),this.i4=new n(4).toRed(this.red).redInvm(),this.two=new n(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}function f(t,e,r){o.BasePoint.call(this,t,"projective"),null===e&&null===r?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new n(e,16),this.z=new n(r,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}i(a,o),t.exports=a,a.prototype.validate=function(t){var e=t.normalize().x,r=e.redSqr(),n=r.redMul(e).redAdd(r.redMul(this.a)).redAdd(e);return 0===n.redSqrt().redSqr().cmp(n)},i(f,o.BasePoint),a.prototype.decodePoint=function(t,e){return this.point(s.toArray(t,e),1)},a.prototype.point=function(t,e){return new f(this,t,e)},a.prototype.pointFromJSON=function(t){return f.fromJSON(this,t)},f.prototype.precompute=function(){},f.prototype._encode=function(){return this.getX().toArray("be",this.curve.p.byteLength())},f.fromJSON=function(t,e){return new f(t,e[0],e[1]||t.one)},f.prototype.inspect=function(){return this.isInfinity()?"":""},f.prototype.isInfinity=function(){return 0===this.z.cmpn(0)},f.prototype.dbl=function(){var t=this.x.redAdd(this.z).redSqr(),e=this.x.redSub(this.z).redSqr(),r=t.redSub(e),n=t.redMul(e),i=r.redMul(e.redAdd(this.curve.a24.redMul(r)));return this.curve.point(n,i)},f.prototype.add=function(){throw new Error("Not supported on Montgomery curve")},f.prototype.diffAdd=function(t,e){var r=this.x.redAdd(this.z),n=this.x.redSub(this.z),i=t.x.redAdd(t.z),o=t.x.redSub(t.z).redMul(r),s=i.redMul(n),a=e.z.redMul(o.redAdd(s).redSqr()),f=e.x.redMul(o.redISub(s).redSqr());return this.curve.point(a,f)},f.prototype.mul=function(t){for(var e=t.clone(),r=this,n=this.curve.point(null,null),i=[];0!==e.cmpn(0);e.iushrn(1))i.push(e.andln(1));for(var o=i.length-1;o>=0;o--)0===i[o]?(r=r.diffAdd(n,this),n=n.dbl()):(n=r.diffAdd(n,this),r=r.dbl());return n},f.prototype.mulAdd=function(){throw new Error("Not supported on Montgomery curve")},f.prototype.jumlAdd=function(){throw new Error("Not supported on Montgomery curve")},f.prototype.eq=function(t){return 0===this.getX().cmp(t.getX())},f.prototype.normalize=function(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},f.prototype.getX=function(){return this.normalize(),this.x.fromRed()}},7715:(t,e,r)=>{"use strict";var n=r(8288),i=r(2197),o=r(1285),s=r(8919),a=n.assert;function f(t){s.call(this,"short",t),this.a=new i(t.a,16).toRed(this.red),this.b=new i(t.b,16).toRed(this.red),this.tinv=this.two.redInvm(),this.zeroA=0===this.a.fromRed().cmpn(0),this.threeA=0===this.a.fromRed().sub(this.p).cmpn(-3),this.endo=this._getEndomorphism(t),this._endoWnafT1=new Array(4),this._endoWnafT2=new Array(4)}function h(t,e,r,n){s.BasePoint.call(this,t,"affine"),null===e&&null===r?(this.x=null,this.y=null,this.inf=!0):(this.x=new i(e,16),this.y=new i(r,16),n&&(this.x.forceRed(this.curve.red),this.y.forceRed(this.curve.red)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.inf=!1)}function d(t,e,r,n){s.BasePoint.call(this,t,"jacobian"),null===e&&null===r&&null===n?(this.x=this.curve.one,this.y=this.curve.one,this.z=new i(0)):(this.x=new i(e,16),this.y=new i(r,16),this.z=new i(n,16)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.zOne=this.z===this.curve.one}o(f,s),t.exports=f,f.prototype._getEndomorphism=function(t){if(this.zeroA&&this.g&&this.n&&1===this.p.modn(3)){var e,r;if(t.beta)e=new i(t.beta,16).toRed(this.red);else{var n=this._getEndoRoots(this.p);e=(e=n[0].cmp(n[1])<0?n[0]:n[1]).toRed(this.red)}if(t.lambda)r=new i(t.lambda,16);else{var o=this._getEndoRoots(this.n);0===this.g.mul(o[0]).x.cmp(this.g.x.redMul(e))?r=o[0]:(r=o[1],a(0===this.g.mul(r).x.cmp(this.g.x.redMul(e))))}return{beta:e,lambda:r,basis:t.basis?t.basis.map((function(t){return{a:new i(t.a,16),b:new i(t.b,16)}})):this._getEndoBasis(r)}}},f.prototype._getEndoRoots=function(t){var e=t===this.p?this.red:i.mont(t),r=new i(2).toRed(e).redInvm(),n=r.redNeg(),o=new i(3).toRed(e).redNeg().redSqrt().redMul(r);return[n.redAdd(o).fromRed(),n.redSub(o).fromRed()]},f.prototype._getEndoBasis=function(t){for(var e,r,n,o,s,a,f,h,d,c=this.n.ushrn(Math.floor(this.n.bitLength()/2)),u=t,l=this.n.clone(),b=new i(1),p=new i(0),g=new i(0),m=new i(1),y=0;0!==u.cmpn(0);){var _=l.div(u);h=l.sub(_.mul(u)),d=g.sub(_.mul(b));var v=m.sub(_.mul(p));if(!n&&h.cmp(c)<0)e=f.neg(),r=b,n=h.neg(),o=d;else if(n&&2==++y)break;f=h,l=u,u=h,g=b,b=d,m=p,p=v}s=h.neg(),a=d;var w=n.sqr().add(o.sqr());return s.sqr().add(a.sqr()).cmp(w)>=0&&(s=e,a=r),n.negative&&(n=n.neg(),o=o.neg()),s.negative&&(s=s.neg(),a=a.neg()),[{a:n,b:o},{a:s,b:a}]},f.prototype._endoSplit=function(t){var e=this.endo.basis,r=e[0],n=e[1],i=n.b.mul(t).divRound(this.n),o=r.b.neg().mul(t).divRound(this.n),s=i.mul(r.a),a=o.mul(n.a),f=i.mul(r.b),h=o.mul(n.b);return{k1:t.sub(s).sub(a),k2:f.add(h).neg()}},f.prototype.pointFromX=function(t,e){(t=new i(t,16)).red||(t=t.toRed(this.red));var r=t.redSqr().redMul(t).redIAdd(t.redMul(this.a)).redIAdd(this.b),n=r.redSqrt();if(0!==n.redSqr().redSub(r).cmp(this.zero))throw new Error("invalid point");var o=n.fromRed().isOdd();return(e&&!o||!e&&o)&&(n=n.redNeg()),this.point(t,n)},f.prototype.validate=function(t){if(t.inf)return!0;var e=t.x,r=t.y,n=this.a.redMul(e),i=e.redSqr().redMul(e).redIAdd(n).redIAdd(this.b);return 0===r.redSqr().redISub(i).cmpn(0)},f.prototype._endoWnafMulAdd=function(t,e,r){for(var n=this._endoWnafT1,i=this._endoWnafT2,o=0;o":""},h.prototype.isInfinity=function(){return this.inf},h.prototype.add=function(t){if(this.inf)return t;if(t.inf)return this;if(this.eq(t))return this.dbl();if(this.neg().eq(t))return this.curve.point(null,null);if(0===this.x.cmp(t.x))return this.curve.point(null,null);var e=this.y.redSub(t.y);0!==e.cmpn(0)&&(e=e.redMul(this.x.redSub(t.x).redInvm()));var r=e.redSqr().redISub(this.x).redISub(t.x),n=e.redMul(this.x.redSub(r)).redISub(this.y);return this.curve.point(r,n)},h.prototype.dbl=function(){if(this.inf)return this;var t=this.y.redAdd(this.y);if(0===t.cmpn(0))return this.curve.point(null,null);var e=this.curve.a,r=this.x.redSqr(),n=t.redInvm(),i=r.redAdd(r).redIAdd(r).redIAdd(e).redMul(n),o=i.redSqr().redISub(this.x.redAdd(this.x)),s=i.redMul(this.x.redSub(o)).redISub(this.y);return this.curve.point(o,s)},h.prototype.getX=function(){return this.x.fromRed()},h.prototype.getY=function(){return this.y.fromRed()},h.prototype.mul=function(t){return t=new i(t,16),this.isInfinity()?this:this._hasDoubles(t)?this.curve._fixedNafMul(this,t):this.curve.endo?this.curve._endoWnafMulAdd([this],[t]):this.curve._wnafMul(this,t)},h.prototype.mulAdd=function(t,e,r){var n=[this,e],i=[t,r];return this.curve.endo?this.curve._endoWnafMulAdd(n,i):this.curve._wnafMulAdd(1,n,i,2)},h.prototype.jmulAdd=function(t,e,r){var n=[this,e],i=[t,r];return this.curve.endo?this.curve._endoWnafMulAdd(n,i,!0):this.curve._wnafMulAdd(1,n,i,2,!0)},h.prototype.eq=function(t){return this===t||this.inf===t.inf&&(this.inf||0===this.x.cmp(t.x)&&0===this.y.cmp(t.y))},h.prototype.neg=function(t){if(this.inf)return this;var e=this.curve.point(this.x,this.y.redNeg());if(t&&this.precomputed){var r=this.precomputed,n=function(t){return t.neg()};e.precomputed={naf:r.naf&&{wnd:r.naf.wnd,points:r.naf.points.map(n)},doubles:r.doubles&&{step:r.doubles.step,points:r.doubles.points.map(n)}}}return e},h.prototype.toJ=function(){return this.inf?this.curve.jpoint(null,null,null):this.curve.jpoint(this.x,this.y,this.curve.one)},o(d,s.BasePoint),f.prototype.jpoint=function(t,e,r){return new d(this,t,e,r)},d.prototype.toP=function(){if(this.isInfinity())return this.curve.point(null,null);var t=this.z.redInvm(),e=t.redSqr(),r=this.x.redMul(e),n=this.y.redMul(e).redMul(t);return this.curve.point(r,n)},d.prototype.neg=function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},d.prototype.add=function(t){if(this.isInfinity())return t;if(t.isInfinity())return this;var e=t.z.redSqr(),r=this.z.redSqr(),n=this.x.redMul(e),i=t.x.redMul(r),o=this.y.redMul(e.redMul(t.z)),s=t.y.redMul(r.redMul(this.z)),a=n.redSub(i),f=o.redSub(s);if(0===a.cmpn(0))return 0!==f.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var h=a.redSqr(),d=h.redMul(a),c=n.redMul(h),u=f.redSqr().redIAdd(d).redISub(c).redISub(c),l=f.redMul(c.redISub(u)).redISub(o.redMul(d)),b=this.z.redMul(t.z).redMul(a);return this.curve.jpoint(u,l,b)},d.prototype.mixedAdd=function(t){if(this.isInfinity())return t.toJ();if(t.isInfinity())return this;var e=this.z.redSqr(),r=this.x,n=t.x.redMul(e),i=this.y,o=t.y.redMul(e).redMul(this.z),s=r.redSub(n),a=i.redSub(o);if(0===s.cmpn(0))return 0!==a.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var f=s.redSqr(),h=f.redMul(s),d=r.redMul(f),c=a.redSqr().redIAdd(h).redISub(d).redISub(d),u=a.redMul(d.redISub(c)).redISub(i.redMul(h)),l=this.z.redMul(s);return this.curve.jpoint(c,u,l)},d.prototype.dblp=function(t){if(0===t)return this;if(this.isInfinity())return this;if(!t)return this.dbl();var e;if(this.curve.zeroA||this.curve.threeA){var r=this;for(e=0;e=0)return!1;if(r.redIAdd(i),0===this.x.cmp(r))return!0}},d.prototype.inspect=function(){return this.isInfinity()?"":""},d.prototype.isInfinity=function(){return 0===this.z.cmpn(0)}},1479:(t,e,r)=>{"use strict";var n,i=e,o=r(3506),s=r(8610),a=r(8288).assert;function f(t){"short"===t.type?this.curve=new s.short(t):"edwards"===t.type?this.curve=new s.edwards(t):this.curve=new s.mont(t),this.g=this.curve.g,this.n=this.curve.n,this.hash=t.hash,a(this.g.validate(),"Invalid curve"),a(this.g.mul(this.n).isInfinity(),"Invalid curve, G*N != O")}function h(t,e){Object.defineProperty(i,t,{configurable:!0,enumerable:!0,get:function(){var r=new f(e);return Object.defineProperty(i,t,{configurable:!0,enumerable:!0,value:r}),r}})}i.PresetCurve=f,h("p192",{type:"short",prime:"p192",p:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff",a:"ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc",b:"64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1",n:"ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831",hash:o.sha256,gRed:!1,g:["188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012","07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811"]}),h("p224",{type:"short",prime:"p224",p:"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001",a:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe",b:"b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4",n:"ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d",hash:o.sha256,gRed:!1,g:["b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21","bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34"]}),h("p256",{type:"short",prime:null,p:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff",a:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc",b:"5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b",n:"ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551",hash:o.sha256,gRed:!1,g:["6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296","4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5"]}),h("p384",{type:"short",prime:null,p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 ffffffff",a:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 fffffffc",b:"b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f 5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef",n:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 f4372ddf 581a0db2 48b0a77a ecec196a ccc52973",hash:o.sha384,gRed:!1,g:["aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 5502f25d bf55296c 3a545e38 72760ab7","3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 0a60b1ce 1d7e819d 7a431d7c 90ea0e5f"]}),h("p521",{type:"short",prime:null,p:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff",a:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffc",b:"00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b 99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd 3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00",n:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409",hash:o.sha512,gRed:!1,g:["000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66","00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 3fad0761 353c7086 a272c240 88be9476 9fd16650"]}),h("curve25519",{type:"mont",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"76d06",b:"1",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:o.sha256,gRed:!1,g:["9"]}),h("ed25519",{type:"edwards",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"-1",c:"1",d:"52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:o.sha256,gRed:!1,g:["216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a","6666666666666666666666666666666666666666666666666666666666666658"]});try{n=r(7983)}catch(t){n=void 0}h("secp256k1",{type:"short",prime:"k256",p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f",a:"0",b:"7",n:"ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141",h:"1",hash:o.sha256,beta:"7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee",lambda:"5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72",basis:[{a:"3086d221a7d46bcde86c90e49284eb15",b:"-e4437ed6010e88286f547fa90abfe4c3"},{a:"114ca50f7a8e2f3f657c1108d9d44cfd8",b:"3086d221a7d46bcde86c90e49284eb15"}],gRed:!1,g:["79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",n]})},8596:(t,e,r)=>{"use strict";var n=r(2197),i=r(8873),o=r(8288),s=r(1479),a=r(2745),f=o.assert,h=r(2307),d=r(1798);function c(t){if(!(this instanceof c))return new c(t);"string"==typeof t&&(f(Object.prototype.hasOwnProperty.call(s,t),"Unknown curve "+t),t=s[t]),t instanceof s.PresetCurve&&(t={curve:t}),this.curve=t.curve.curve,this.n=this.curve.n,this.nh=this.n.ushrn(1),this.g=this.curve.g,this.g=t.curve.g,this.g.precompute(t.curve.n.bitLength()+1),this.hash=t.hash||t.curve.hash}t.exports=c,c.prototype.keyPair=function(t){return new h(this,t)},c.prototype.keyFromPrivate=function(t,e){return h.fromPrivate(this,t,e)},c.prototype.keyFromPublic=function(t,e){return h.fromPublic(this,t,e)},c.prototype.genKeyPair=function(t){t||(t={});for(var e=new i({hash:this.hash,pers:t.pers,persEnc:t.persEnc||"utf8",entropy:t.entropy||a(this.hash.hmacStrength),entropyEnc:t.entropy&&t.entropyEnc||"utf8",nonce:this.n.toArray()}),r=this.n.byteLength(),o=this.n.sub(new n(2));;){var s=new n(e.generate(r));if(!(s.cmp(o)>0))return s.iaddn(1),this.keyFromPrivate(s)}},c.prototype._truncateToN=function(t,e){var r=8*t.byteLength()-this.n.bitLength();return r>0&&(t=t.ushrn(r)),!e&&t.cmp(this.n)>=0?t.sub(this.n):t},c.prototype.sign=function(t,e,r,o){"object"==typeof r&&(o=r,r=null),o||(o={}),e=this.keyFromPrivate(e,r),t=this._truncateToN(new n(t,16));for(var s=this.n.byteLength(),a=e.getPrivate().toArray("be",s),f=t.toArray("be",s),h=new i({hash:this.hash,entropy:a,nonce:f,pers:o.pers,persEnc:o.persEnc||"utf8"}),c=this.n.sub(new n(1)),u=0;;u++){var l=o.k?o.k(u):new n(h.generate(this.n.byteLength()));if(!((l=this._truncateToN(l,!0)).cmpn(1)<=0||l.cmp(c)>=0)){var b=this.g.mul(l);if(!b.isInfinity()){var p=b.getX(),g=p.umod(this.n);if(0!==g.cmpn(0)){var m=l.invm(this.n).mul(g.mul(e.getPrivate()).iadd(t));if(0!==(m=m.umod(this.n)).cmpn(0)){var y=(b.getY().isOdd()?1:0)|(0!==p.cmp(g)?2:0);return o.canonical&&m.cmp(this.nh)>0&&(m=this.n.sub(m),y^=1),new d({r:g,s:m,recoveryParam:y})}}}}}},c.prototype.verify=function(t,e,r,i){t=this._truncateToN(new n(t,16)),r=this.keyFromPublic(r,i);var o=(e=new d(e,"hex")).r,s=e.s;if(o.cmpn(1)<0||o.cmp(this.n)>=0)return!1;if(s.cmpn(1)<0||s.cmp(this.n)>=0)return!1;var a,f=s.invm(this.n),h=f.mul(t).umod(this.n),c=f.mul(o).umod(this.n);return this.curve._maxwellTrick?!(a=this.g.jmulAdd(h,r.getPublic(),c)).isInfinity()&&a.eqXToP(o):!(a=this.g.mulAdd(h,r.getPublic(),c)).isInfinity()&&0===a.getX().umod(this.n).cmp(o)},c.prototype.recoverPubKey=function(t,e,r,i){f((3&r)===r,"The recovery param is more than two bits"),e=new d(e,i);var o=this.n,s=new n(t),a=e.r,h=e.s,c=1&r,u=r>>1;if(a.cmp(this.curve.p.umod(this.curve.n))>=0&&u)throw new Error("Unable to find sencond key candinate");a=u?this.curve.pointFromX(a.add(this.curve.n),c):this.curve.pointFromX(a,c);var l=e.r.invm(o),b=o.sub(s).mul(l).umod(o),p=h.mul(l).umod(o);return this.g.mulAdd(b,a,p)},c.prototype.getKeyRecoveryParam=function(t,e,r,n){if(null!==(e=new d(e,n)).recoveryParam)return e.recoveryParam;for(var i=0;i<4;i++){var o;try{o=this.recoverPubKey(t,e,i)}catch(t){continue}if(o.eq(r))return i}throw new Error("Unable to find valid recovery factor")}},2307:(t,e,r)=>{"use strict";var n=r(2197),i=r(8288).assert;function o(t,e){this.ec=t,this.priv=null,this.pub=null,e.priv&&this._importPrivate(e.priv,e.privEnc),e.pub&&this._importPublic(e.pub,e.pubEnc)}t.exports=o,o.fromPublic=function(t,e,r){return e instanceof o?e:new o(t,{pub:e,pubEnc:r})},o.fromPrivate=function(t,e,r){return e instanceof o?e:new o(t,{priv:e,privEnc:r})},o.prototype.validate=function(){var t=this.getPublic();return t.isInfinity()?{result:!1,reason:"Invalid public key"}:t.validate()?t.mul(this.ec.curve.n).isInfinity()?{result:!0,reason:null}:{result:!1,reason:"Public key * N != O"}:{result:!1,reason:"Public key is not a point"}},o.prototype.getPublic=function(t,e){return"string"==typeof t&&(e=t,t=null),this.pub||(this.pub=this.ec.g.mul(this.priv)),e?this.pub.encode(e,t):this.pub},o.prototype.getPrivate=function(t){return"hex"===t?this.priv.toString(16,2):this.priv},o.prototype._importPrivate=function(t,e){this.priv=new n(t,e||16),this.priv=this.priv.umod(this.ec.curve.n)},o.prototype._importPublic=function(t,e){if(t.x||t.y)return"mont"===this.ec.curve.type?i(t.x,"Need x coordinate"):"short"!==this.ec.curve.type&&"edwards"!==this.ec.curve.type||i(t.x&&t.y,"Need both x and y coordinate"),void(this.pub=this.ec.curve.point(t.x,t.y));this.pub=this.ec.curve.decodePoint(t,e)},o.prototype.derive=function(t){return t.validate()||i(t.validate(),"public point not validated"),t.mul(this.priv).getX()},o.prototype.sign=function(t,e,r){return this.ec.sign(t,this,e,r)},o.prototype.verify=function(t,e){return this.ec.verify(t,e,this)},o.prototype.inspect=function(){return""}},1798:(t,e,r)=>{"use strict";var n=r(2197),i=r(8288),o=i.assert;function s(t,e){if(t instanceof s)return t;this._importDER(t,e)||(o(t.r&&t.s,"Signature without r or s"),this.r=new n(t.r,16),this.s=new n(t.s,16),void 0===t.recoveryParam?this.recoveryParam=null:this.recoveryParam=t.recoveryParam)}function a(){this.place=0}function f(t,e){var r=t[e.place++];if(!(128&r))return r;var n=15&r;if(0===n||n>4)return!1;for(var i=0,o=0,s=e.place;o>>=0;return!(i<=127)&&(e.place=s,i)}function h(t){for(var e=0,r=t.length-1;!t[e]&&!(128&t[e+1])&&e>>3);for(t.push(128|r);--r;)t.push(e>>>(r<<3)&255);t.push(e)}}t.exports=s,s.prototype._importDER=function(t,e){t=i.toArray(t,e);var r=new a;if(48!==t[r.place++])return!1;var o=f(t,r);if(!1===o)return!1;if(o+r.place!==t.length)return!1;if(2!==t[r.place++])return!1;var s=f(t,r);if(!1===s)return!1;var h=t.slice(r.place,s+r.place);if(r.place+=s,2!==t[r.place++])return!1;var d=f(t,r);if(!1===d)return!1;if(t.length!==d+r.place)return!1;var c=t.slice(r.place,d+r.place);if(0===h[0]){if(!(128&h[1]))return!1;h=h.slice(1)}if(0===c[0]){if(!(128&c[1]))return!1;c=c.slice(1)}return this.r=new n(h),this.s=new n(c),this.recoveryParam=null,!0},s.prototype.toDER=function(t){var e=this.r.toArray(),r=this.s.toArray();for(128&e[0]&&(e=[0].concat(e)),128&r[0]&&(r=[0].concat(r)),e=h(e),r=h(r);!(r[0]||128&r[1]);)r=r.slice(1);var n=[2];d(n,e.length),(n=n.concat(e)).push(2),d(n,r.length);var o=n.concat(r),s=[48];return d(s,o.length),s=s.concat(o),i.encode(s,t)}},9208:(t,e,r)=>{"use strict";var n=r(3506),i=r(1479),o=r(8288),s=o.assert,a=o.parseBytes,f=r(851),h=r(6117);function d(t){if(s("ed25519"===t,"only tested with ed25519 so far"),!(this instanceof d))return new d(t);t=i[t].curve,this.curve=t,this.g=t.g,this.g.precompute(t.n.bitLength()+1),this.pointClass=t.point().constructor,this.encodingLength=Math.ceil(t.n.bitLength()/8),this.hash=n.sha512}t.exports=d,d.prototype.sign=function(t,e){t=a(t);var r=this.keyFromSecret(e),n=this.hashInt(r.messagePrefix(),t),i=this.g.mul(n),o=this.encodePoint(i),s=this.hashInt(o,r.pubBytes(),t).mul(r.priv()),f=n.add(s).umod(this.curve.n);return this.makeSignature({R:i,S:f,Rencoded:o})},d.prototype.verify=function(t,e,r){t=a(t),e=this.makeSignature(e);var n=this.keyFromPublic(r),i=this.hashInt(e.Rencoded(),n.pubBytes(),t),o=this.g.mul(e.S());return e.R().add(n.pub().mul(i)).eq(o)},d.prototype.hashInt=function(){for(var t=this.hash(),e=0;e{"use strict";var n=r(8288),i=n.assert,o=n.parseBytes,s=n.cachedProperty;function a(t,e){this.eddsa=t,this._secret=o(e.secret),t.isPoint(e.pub)?this._pub=e.pub:this._pubBytes=o(e.pub)}a.fromPublic=function(t,e){return e instanceof a?e:new a(t,{pub:e})},a.fromSecret=function(t,e){return e instanceof a?e:new a(t,{secret:e})},a.prototype.secret=function(){return this._secret},s(a,"pubBytes",(function(){return this.eddsa.encodePoint(this.pub())})),s(a,"pub",(function(){return this._pubBytes?this.eddsa.decodePoint(this._pubBytes):this.eddsa.g.mul(this.priv())})),s(a,"privBytes",(function(){var t=this.eddsa,e=this.hash(),r=t.encodingLength-1,n=e.slice(0,t.encodingLength);return n[0]&=248,n[r]&=127,n[r]|=64,n})),s(a,"priv",(function(){return this.eddsa.decodeInt(this.privBytes())})),s(a,"hash",(function(){return this.eddsa.hash().update(this.secret()).digest()})),s(a,"messagePrefix",(function(){return this.hash().slice(this.eddsa.encodingLength)})),a.prototype.sign=function(t){return i(this._secret,"KeyPair can only verify"),this.eddsa.sign(t,this)},a.prototype.verify=function(t,e){return this.eddsa.verify(t,e,this)},a.prototype.getSecret=function(t){return i(this._secret,"KeyPair is public only"),n.encode(this.secret(),t)},a.prototype.getPublic=function(t){return n.encode(this.pubBytes(),t)},t.exports=a},6117:(t,e,r)=>{"use strict";var n=r(2197),i=r(8288),o=i.assert,s=i.cachedProperty,a=i.parseBytes;function f(t,e){this.eddsa=t,"object"!=typeof e&&(e=a(e)),Array.isArray(e)&&(e={R:e.slice(0,t.encodingLength),S:e.slice(t.encodingLength)}),o(e.R&&e.S,"Signature without R or S"),t.isPoint(e.R)&&(this._R=e.R),e.S instanceof n&&(this._S=e.S),this._Rencoded=Array.isArray(e.R)?e.R:e.Rencoded,this._Sencoded=Array.isArray(e.S)?e.S:e.Sencoded}s(f,"S",(function(){return this.eddsa.decodeInt(this.Sencoded())})),s(f,"R",(function(){return this.eddsa.decodePoint(this.Rencoded())})),s(f,"Rencoded",(function(){return this.eddsa.encodePoint(this.R())})),s(f,"Sencoded",(function(){return this.eddsa.encodeInt(this.S())})),f.prototype.toBytes=function(){return this.Rencoded().concat(this.Sencoded())},f.prototype.toHex=function(){return i.encode(this.toBytes(),"hex").toUpperCase()},t.exports=f},7983:t=>{t.exports={doubles:{step:4,points:[["e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a","f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821"],["8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508","11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf"],["175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739","d3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695"],["363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640","4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9"],["8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c","4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36"],["723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda","96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f"],["eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa","5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999"],["100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0","cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09"],["e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d","9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d"],["feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d","e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088"],["da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1","9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d"],["53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0","5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8"],["8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047","10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a"],["385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862","283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453"],["6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7","7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160"],["3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd","56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0"],["85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83","7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6"],["948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a","53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589"],["6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8","bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17"],["e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d","4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda"],["e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725","7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd"],["213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754","4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2"],["4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c","17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6"],["fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6","6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f"],["76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39","c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01"],["c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891","893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3"],["d895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b","febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f"],["b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03","2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7"],["e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d","eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78"],["a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070","7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1"],["90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4","e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150"],["8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da","662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82"],["e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11","1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc"],["8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e","efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b"],["e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41","2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51"],["b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef","67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45"],["d68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8","db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120"],["324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d","648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84"],["4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96","35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d"],["9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd","ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d"],["6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5","9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8"],["a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266","40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8"],["7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71","34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac"],["928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac","c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f"],["85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751","1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962"],["ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e","493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907"],["827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241","c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec"],["eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3","be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d"],["e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f","4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414"],["1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19","aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd"],["146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be","b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0"],["fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9","6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811"],["da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2","8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1"],["a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13","7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c"],["174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c","ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73"],["959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba","2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd"],["d2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151","e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405"],["64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073","d99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589"],["8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458","38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e"],["13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b","69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27"],["bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366","d3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1"],["8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa","40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482"],["8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0","620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945"],["dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787","7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573"],["f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e","ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82"]]},naf:{wnd:7,points:[["f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9","388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672"],["2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4","d8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6"],["5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc","6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da"],["acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe","cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37"],["774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb","d984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b"],["f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8","ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81"],["d7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e","581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58"],["defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34","4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77"],["2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c","85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a"],["352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5","321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c"],["2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f","2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67"],["9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714","73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402"],["daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729","a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55"],["c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db","2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482"],["6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4","e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82"],["1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5","b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396"],["605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479","2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49"],["62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d","80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf"],["80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f","1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a"],["7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb","d0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7"],["d528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9","eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933"],["49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963","758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a"],["77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74","958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6"],["f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530","e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37"],["463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b","5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e"],["f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247","cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6"],["caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1","cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476"],["2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120","4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40"],["7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435","91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61"],["754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18","673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683"],["e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8","59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5"],["186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb","3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b"],["df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f","55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417"],["5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143","efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868"],["290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba","e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a"],["af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45","f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6"],["766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a","744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996"],["59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e","c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e"],["f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8","e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d"],["7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c","30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2"],["948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519","e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e"],["7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab","100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437"],["3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca","ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311"],["d3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf","8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4"],["1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610","68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575"],["733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4","f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d"],["15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c","d56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d"],["a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940","edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629"],["e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980","a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06"],["311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3","66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374"],["34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf","9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee"],["f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63","4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1"],["d7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448","fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b"],["32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf","5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661"],["7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5","8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6"],["ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6","8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e"],["16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5","5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d"],["eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99","f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc"],["78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51","f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4"],["494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5","42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c"],["a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5","204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b"],["c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997","4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913"],["841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881","73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154"],["5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5","39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865"],["36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66","d2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc"],["336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726","ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224"],["8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede","6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e"],["1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94","60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6"],["85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31","3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511"],["29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51","b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b"],["a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252","ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2"],["4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5","cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c"],["d24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b","6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3"],["ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4","322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d"],["af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f","6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700"],["e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889","2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4"],["591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246","b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196"],["11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984","998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4"],["3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a","b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257"],["cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030","bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13"],["c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197","6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096"],["c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593","c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38"],["a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef","21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f"],["347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38","60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448"],["da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a","49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a"],["c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111","5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4"],["4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502","7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437"],["3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea","be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7"],["cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26","8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d"],["b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986","39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a"],["d4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e","62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54"],["48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4","25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77"],["dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda","ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517"],["6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859","cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10"],["e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f","f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125"],["eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c","6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e"],["13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942","fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1"],["ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a","1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2"],["b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80","5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423"],["ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d","438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8"],["8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1","cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758"],["52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63","c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375"],["e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352","6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d"],["7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193","ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec"],["5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00","9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0"],["32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58","ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c"],["e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7","d3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4"],["8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8","c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f"],["4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e","67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649"],["3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d","cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826"],["674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b","299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5"],["d32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f","f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87"],["30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6","462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b"],["be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297","62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc"],["93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a","7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c"],["b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c","ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f"],["d5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52","4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a"],["d3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb","bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46"],["463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065","bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f"],["7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917","603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03"],["74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9","cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08"],["30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3","553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8"],["9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57","712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373"],["176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66","ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3"],["75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8","9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8"],["809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721","9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1"],["1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180","4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9"]]}}},8288:(t,e,r)=>{"use strict";var n=e,i=r(2197),o=r(9561),s=r(3022);n.assert=o,n.toArray=s.toArray,n.zero2=s.zero2,n.toHex=s.toHex,n.encode=s.encode,n.getNAF=function(t,e,r){var n=new Array(Math.max(t.bitLength(),r)+1);n.fill(0);for(var i=1<(i>>1)-1?(i>>1)-f:f,o.isubn(a)):a=0,n[s]=a,o.iushrn(1)}return n},n.getJSF=function(t,e){var r=[[],[]];t=t.clone(),e=e.clone();for(var n,i=0,o=0;t.cmpn(-i)>0||e.cmpn(-o)>0;){var s,a,f=t.andln(3)+i&3,h=e.andln(3)+o&3;3===f&&(f=-1),3===h&&(h=-1),s=0==(1&f)?0:3!=(n=t.andln(7)+i&7)&&5!==n||2!==h?f:-f,r[0].push(s),a=0==(1&h)?0:3!=(n=e.andln(7)+o&7)&&5!==n||2!==f?h:-h,r[1].push(a),2*i===s+1&&(i=1-i),2*o===a+1&&(o=1-o),t.iushrn(1),e.iushrn(1)}return r},n.cachedProperty=function(t,e,r){var n="_"+e;t.prototype[e]=function(){return void 0!==this[n]?this[n]:this[n]=r.call(this)}},n.parseBytes=function(t){return"string"==typeof t?n.toArray(t,"hex"):t},n.intFromLE=function(t){return new i(t,"hex","le")}},2699:t=>{"use strict";var e,r="object"==typeof Reflect?Reflect:null,n=r&&"function"==typeof r.apply?r.apply:function(t,e,r){return Function.prototype.apply.call(t,e,r)};e=r&&"function"==typeof r.ownKeys?r.ownKeys:Object.getOwnPropertySymbols?function(t){return Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t))}:function(t){return Object.getOwnPropertyNames(t)};var i=Number.isNaN||function(t){return t!=t};function o(){o.init.call(this)}t.exports=o,t.exports.once=function(t,e){return new Promise((function(r,n){function i(r){t.removeListener(e,o),n(r)}function o(){"function"==typeof t.removeListener&&t.removeListener("error",i),r([].slice.call(arguments))}p(t,e,o,{once:!0}),"error"!==e&&function(t,e,r){"function"==typeof t.on&&p(t,"error",e,{once:!0})}(t,i)}))},o.EventEmitter=o,o.prototype._events=void 0,o.prototype._eventsCount=0,o.prototype._maxListeners=void 0;var s=10;function a(t){if("function"!=typeof t)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof t)}function f(t){return void 0===t._maxListeners?o.defaultMaxListeners:t._maxListeners}function h(t,e,r,n){var i,o,s,h;if(a(r),void 0===(o=t._events)?(o=t._events=Object.create(null),t._eventsCount=0):(void 0!==o.newListener&&(t.emit("newListener",e,r.listener?r.listener:r),o=t._events),s=o[e]),void 0===s)s=o[e]=r,++t._eventsCount;else if("function"==typeof s?s=o[e]=n?[r,s]:[s,r]:n?s.unshift(r):s.push(r),(i=f(t))>0&&s.length>i&&!s.warned){s.warned=!0;var d=new Error("Possible EventEmitter memory leak detected. "+s.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");d.name="MaxListenersExceededWarning",d.emitter=t,d.type=e,d.count=s.length,h=d,console&&console.warn&&console.warn(h)}return t}function d(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function c(t,e,r){var n={fired:!1,wrapFn:void 0,target:t,type:e,listener:r},i=d.bind(n);return i.listener=r,n.wrapFn=i,i}function u(t,e,r){var n=t._events;if(void 0===n)return[];var i=n[e];return void 0===i?[]:"function"==typeof i?r?[i.listener||i]:[i]:r?function(t){for(var e=new Array(t.length),r=0;r0&&(s=e[0]),s instanceof Error)throw s;var a=new Error("Unhandled error."+(s?" ("+s.message+")":""));throw a.context=s,a}var f=o[t];if(void 0===f)return!1;if("function"==typeof f)n(f,this,e);else{var h=f.length,d=b(f,h);for(r=0;r=0;o--)if(r[o]===e||r[o].listener===e){s=r[o].listener,i=o;break}if(i<0)return this;0===i?r.shift():function(t,e){for(;e+1=0;n--)this.removeListener(t,e[n]);return this},o.prototype.listeners=function(t){return u(this,t,!0)},o.prototype.rawListeners=function(t){return u(this,t,!1)},o.listenerCount=function(t,e){return"function"==typeof t.listenerCount?t.listenerCount(e):l.call(t,e)},o.prototype.listenerCount=l,o.prototype.eventNames=function(){return this._eventsCount>0?e(this._events):[]}},4485:(t,e,r)=>{"use strict";var n=r(7834).Buffer,i=r(7525).Transform;function o(t){i.call(this),this._block=n.allocUnsafe(t),this._blockSize=t,this._blockOffset=0,this._length=[0,0,0,0],this._finalized=!1}r(1285)(o,i),o.prototype._transform=function(t,e,r){var n=null;try{this.update(t,e)}catch(t){n=t}r(n)},o.prototype._flush=function(t){var e=null;try{this.push(this.digest())}catch(t){e=t}t(e)},o.prototype.update=function(t,e){if(function(t,e){if(!n.isBuffer(t)&&"string"!=typeof t)throw new TypeError("Data must be a string or a buffer")}(t),this._finalized)throw new Error("Digest already called");n.isBuffer(t)||(t=n.from(t,e));for(var r=this._block,i=0;this._blockOffset+t.length-i>=this._blockSize;){for(var o=this._blockOffset;o0;++s)this._length[s]+=a,(a=this._length[s]/4294967296|0)>0&&(this._length[s]-=4294967296*a);return this},o.prototype._update=function(){throw new Error("_update is not implemented")},o.prototype.digest=function(t){if(this._finalized)throw new Error("Digest already called");this._finalized=!0;var e=this._digest();void 0!==t&&(e=e.toString(t)),this._block.fill(0),this._blockOffset=0;for(var r=0;r<4;++r)this._length[r]=0;return e},o.prototype._digest=function(){throw new Error("_digest is not implemented")},t.exports=o},3506:(t,e,r)=>{var n=e;n.utils=r(212),n.common=r(4495),n.sha=r(5530),n.ripemd=r(1396),n.hmac=r(5047),n.sha1=n.sha.sha1,n.sha256=n.sha.sha256,n.sha224=n.sha.sha224,n.sha384=n.sha.sha384,n.sha512=n.sha.sha512,n.ripemd160=n.ripemd.ripemd160},4495:(t,e,r)=>{"use strict";var n=r(212),i=r(9561);function o(){this.pending=null,this.pendingTotal=0,this.blockSize=this.constructor.blockSize,this.outSize=this.constructor.outSize,this.hmacStrength=this.constructor.hmacStrength,this.padLength=this.constructor.padLength/8,this.endian="big",this._delta8=this.blockSize/8,this._delta32=this.blockSize/32}e.BlockHash=o,o.prototype.update=function(t,e){if(t=n.toArray(t,e),this.pending?this.pending=this.pending.concat(t):this.pending=t,this.pendingTotal+=t.length,this.pending.length>=this._delta8){var r=(t=this.pending).length%this._delta8;this.pending=t.slice(t.length-r,t.length),0===this.pending.length&&(this.pending=null),t=n.join32(t,0,t.length-r,this.endian);for(var i=0;i>>24&255,n[i++]=t>>>16&255,n[i++]=t>>>8&255,n[i++]=255&t}else for(n[i++]=255&t,n[i++]=t>>>8&255,n[i++]=t>>>16&255,n[i++]=t>>>24&255,n[i++]=0,n[i++]=0,n[i++]=0,n[i++]=0,o=8;o{"use strict";var n=r(212),i=r(9561);function o(t,e,r){if(!(this instanceof o))return new o(t,e,r);this.Hash=t,this.blockSize=t.blockSize/8,this.outSize=t.outSize/8,this.inner=null,this.outer=null,this._init(n.toArray(e,r))}t.exports=o,o.prototype._init=function(t){t.length>this.blockSize&&(t=(new this.Hash).update(t).digest()),i(t.length<=this.blockSize);for(var e=t.length;e{"use strict";var n=r(212),i=r(4495),o=n.rotl32,s=n.sum32,a=n.sum32_3,f=n.sum32_4,h=i.BlockHash;function d(){if(!(this instanceof d))return new d;h.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.endian="little"}function c(t,e,r,n){return t<=15?e^r^n:t<=31?e&r|~e&n:t<=47?(e|~r)^n:t<=63?e&n|r&~n:e^(r|~n)}function u(t){return t<=15?0:t<=31?1518500249:t<=47?1859775393:t<=63?2400959708:2840853838}function l(t){return t<=15?1352829926:t<=31?1548603684:t<=47?1836072691:t<=63?2053994217:0}n.inherits(d,h),e.ripemd160=d,d.blockSize=512,d.outSize=160,d.hmacStrength=192,d.padLength=64,d.prototype._update=function(t,e){for(var r=this.h[0],n=this.h[1],i=this.h[2],h=this.h[3],d=this.h[4],y=r,_=n,v=i,w=h,A=d,S=0;S<80;S++){var E=s(o(f(r,c(S,n,i,h),t[b[S]+e],u(S)),g[S]),d);r=d,d=h,h=o(i,10),i=n,n=E,E=s(o(f(y,c(79-S,_,v,w),t[p[S]+e],l(S)),m[S]),A),y=A,A=w,w=o(v,10),v=_,_=E}E=a(this.h[1],i,w),this.h[1]=a(this.h[2],h,A),this.h[2]=a(this.h[3],d,y),this.h[3]=a(this.h[4],r,_),this.h[4]=a(this.h[0],n,v),this.h[0]=E},d.prototype._digest=function(t){return"hex"===t?n.toHex32(this.h,"little"):n.split32(this.h,"little")};var b=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],p=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],g=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],m=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]},5530:(t,e,r)=>{"use strict";e.sha1=r(5079),e.sha224=r(3823),e.sha256=r(8032),e.sha384=r(5328),e.sha512=r(168)},5079:(t,e,r)=>{"use strict";var n=r(212),i=r(4495),o=r(713),s=n.rotl32,a=n.sum32,f=n.sum32_5,h=o.ft_1,d=i.BlockHash,c=[1518500249,1859775393,2400959708,3395469782];function u(){if(!(this instanceof u))return new u;d.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.W=new Array(80)}n.inherits(u,d),t.exports=u,u.blockSize=512,u.outSize=160,u.hmacStrength=80,u.padLength=64,u.prototype._update=function(t,e){for(var r=this.W,n=0;n<16;n++)r[n]=t[e+n];for(;n{"use strict";var n=r(212),i=r(8032);function o(){if(!(this instanceof o))return new o;i.call(this),this.h=[3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428]}n.inherits(o,i),t.exports=o,o.blockSize=512,o.outSize=224,o.hmacStrength=192,o.padLength=64,o.prototype._digest=function(t){return"hex"===t?n.toHex32(this.h.slice(0,7),"big"):n.split32(this.h.slice(0,7),"big")}},8032:(t,e,r)=>{"use strict";var n=r(212),i=r(4495),o=r(713),s=r(9561),a=n.sum32,f=n.sum32_4,h=n.sum32_5,d=o.ch32,c=o.maj32,u=o.s0_256,l=o.s1_256,b=o.g0_256,p=o.g1_256,g=i.BlockHash,m=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];function y(){if(!(this instanceof y))return new y;g.call(this),this.h=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],this.k=m,this.W=new Array(64)}n.inherits(y,g),t.exports=y,y.blockSize=512,y.outSize=256,y.hmacStrength=192,y.padLength=64,y.prototype._update=function(t,e){for(var r=this.W,n=0;n<16;n++)r[n]=t[e+n];for(;n{"use strict";var n=r(212),i=r(168);function o(){if(!(this instanceof o))return new o;i.call(this),this.h=[3418070365,3238371032,1654270250,914150663,2438529370,812702999,355462360,4144912697,1731405415,4290775857,2394180231,1750603025,3675008525,1694076839,1203062813,3204075428]}n.inherits(o,i),t.exports=o,o.blockSize=1024,o.outSize=384,o.hmacStrength=192,o.padLength=128,o.prototype._digest=function(t){return"hex"===t?n.toHex32(this.h.slice(0,12),"big"):n.split32(this.h.slice(0,12),"big")}},168:(t,e,r)=>{"use strict";var n=r(212),i=r(4495),o=r(9561),s=n.rotr64_hi,a=n.rotr64_lo,f=n.shr64_hi,h=n.shr64_lo,d=n.sum64,c=n.sum64_hi,u=n.sum64_lo,l=n.sum64_4_hi,b=n.sum64_4_lo,p=n.sum64_5_hi,g=n.sum64_5_lo,m=i.BlockHash,y=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591];function _(){if(!(this instanceof _))return new _;m.call(this),this.h=[1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209],this.k=y,this.W=new Array(160)}function v(t,e,r,n,i){var o=t&r^~t&i;return o<0&&(o+=4294967296),o}function w(t,e,r,n,i,o){var s=e&n^~e&o;return s<0&&(s+=4294967296),s}function A(t,e,r,n,i){var o=t&r^t&i^r&i;return o<0&&(o+=4294967296),o}function S(t,e,r,n,i,o){var s=e&n^e&o^n&o;return s<0&&(s+=4294967296),s}function E(t,e){var r=s(t,e,28)^s(e,t,2)^s(e,t,7);return r<0&&(r+=4294967296),r}function M(t,e){var r=a(t,e,28)^a(e,t,2)^a(e,t,7);return r<0&&(r+=4294967296),r}function I(t,e){var r=a(t,e,14)^a(t,e,18)^a(e,t,9);return r<0&&(r+=4294967296),r}function R(t,e){var r=s(t,e,1)^s(t,e,8)^f(t,e,7);return r<0&&(r+=4294967296),r}function T(t,e){var r=a(t,e,1)^a(t,e,8)^h(t,e,7);return r<0&&(r+=4294967296),r}function L(t,e){var r=a(t,e,19)^a(e,t,29)^h(t,e,6);return r<0&&(r+=4294967296),r}n.inherits(_,m),t.exports=_,_.blockSize=1024,_.outSize=512,_.hmacStrength=192,_.padLength=128,_.prototype._prepareBlock=function(t,e){for(var r=this.W,n=0;n<32;n++)r[n]=t[e+n];for(;n{"use strict";var n=r(212).rotr32;function i(t,e,r){return t&e^~t&r}function o(t,e,r){return t&e^t&r^e&r}function s(t,e,r){return t^e^r}e.ft_1=function(t,e,r,n){return 0===t?i(e,r,n):1===t||3===t?s(e,r,n):2===t?o(e,r,n):void 0},e.ch32=i,e.maj32=o,e.p32=s,e.s0_256=function(t){return n(t,2)^n(t,13)^n(t,22)},e.s1_256=function(t){return n(t,6)^n(t,11)^n(t,25)},e.g0_256=function(t){return n(t,7)^n(t,18)^t>>>3},e.g1_256=function(t){return n(t,17)^n(t,19)^t>>>10}},212:(t,e,r)=>{"use strict";var n=r(9561),i=r(1285);function o(t,e){return 55296==(64512&t.charCodeAt(e))&&!(e<0||e+1>=t.length)&&56320==(64512&t.charCodeAt(e+1))}function s(t){return(t>>>24|t>>>8&65280|t<<8&16711680|(255&t)<<24)>>>0}function a(t){return 1===t.length?"0"+t:t}function f(t){return 7===t.length?"0"+t:6===t.length?"00"+t:5===t.length?"000"+t:4===t.length?"0000"+t:3===t.length?"00000"+t:2===t.length?"000000"+t:1===t.length?"0000000"+t:t}e.inherits=i,e.toArray=function(t,e){if(Array.isArray(t))return t.slice();if(!t)return[];var r=[];if("string"==typeof t)if(e){if("hex"===e)for((t=t.replace(/[^a-z0-9]+/gi,"")).length%2!=0&&(t="0"+t),i=0;i>6|192,r[n++]=63&s|128):o(t,i)?(s=65536+((1023&s)<<10)+(1023&t.charCodeAt(++i)),r[n++]=s>>18|240,r[n++]=s>>12&63|128,r[n++]=s>>6&63|128,r[n++]=63&s|128):(r[n++]=s>>12|224,r[n++]=s>>6&63|128,r[n++]=63&s|128)}else for(i=0;i>>0}return s},e.split32=function(t,e){for(var r=new Array(4*t.length),n=0,i=0;n>>24,r[i+1]=o>>>16&255,r[i+2]=o>>>8&255,r[i+3]=255&o):(r[i+3]=o>>>24,r[i+2]=o>>>16&255,r[i+1]=o>>>8&255,r[i]=255&o)}return r},e.rotr32=function(t,e){return t>>>e|t<<32-e},e.rotl32=function(t,e){return t<>>32-e},e.sum32=function(t,e){return t+e>>>0},e.sum32_3=function(t,e,r){return t+e+r>>>0},e.sum32_4=function(t,e,r,n){return t+e+r+n>>>0},e.sum32_5=function(t,e,r,n,i){return t+e+r+n+i>>>0},e.sum64=function(t,e,r,n){var i=t[e],o=n+t[e+1]>>>0,s=(o>>0,t[e+1]=o},e.sum64_hi=function(t,e,r,n){return(e+n>>>0>>0},e.sum64_lo=function(t,e,r,n){return e+n>>>0},e.sum64_4_hi=function(t,e,r,n,i,o,s,a){var f=0,h=e;return f+=(h=h+n>>>0)>>0)>>0)>>0},e.sum64_4_lo=function(t,e,r,n,i,o,s,a){return e+n+o+a>>>0},e.sum64_5_hi=function(t,e,r,n,i,o,s,a,f,h){var d=0,c=e;return d+=(c=c+n>>>0)>>0)>>0)>>0)>>0},e.sum64_5_lo=function(t,e,r,n,i,o,s,a,f,h){return e+n+o+a+h>>>0},e.rotr64_hi=function(t,e,r){return(e<<32-r|t>>>r)>>>0},e.rotr64_lo=function(t,e,r){return(t<<32-r|e>>>r)>>>0},e.shr64_hi=function(t,e,r){return t>>>r},e.shr64_lo=function(t,e,r){return(t<<32-r|e>>>r)>>>0}},8873:(t,e,r)=>{"use strict";var n=r(3506),i=r(3022),o=r(9561);function s(t){if(!(this instanceof s))return new s(t);this.hash=t.hash,this.predResist=!!t.predResist,this.outLen=this.hash.outSize,this.minEntropy=t.minEntropy||this.hash.hmacStrength,this._reseed=null,this.reseedInterval=null,this.K=null,this.V=null;var e=i.toArray(t.entropy,t.entropyEnc||"hex"),r=i.toArray(t.nonce,t.nonceEnc||"hex"),n=i.toArray(t.pers,t.persEnc||"hex");o(e.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._init(e,r,n)}t.exports=s,s.prototype._init=function(t,e,r){var n=t.concat(e).concat(r);this.K=new Array(this.outLen/8),this.V=new Array(this.outLen/8);for(var i=0;i=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._update(t.concat(r||[])),this._reseed=1},s.prototype.generate=function(t,e,r,n){if(this._reseed>this.reseedInterval)throw new Error("Reseed is required");"string"!=typeof e&&(n=r,r=e,e=null),r&&(r=i.toArray(r,n||"hex"),this._update(r));for(var o=[];o.length{e.read=function(t,e,r,n,i){var o,s,a=8*i-n-1,f=(1<>1,d=-7,c=r?i-1:0,u=r?-1:1,l=t[e+c];for(c+=u,o=l&(1<<-d)-1,l>>=-d,d+=a;d>0;o=256*o+t[e+c],c+=u,d-=8);for(s=o&(1<<-d)-1,o>>=-d,d+=n;d>0;s=256*s+t[e+c],c+=u,d-=8);if(0===o)o=1-h;else{if(o===f)return s?NaN:1/0*(l?-1:1);s+=Math.pow(2,n),o-=h}return(l?-1:1)*s*Math.pow(2,o-n)},e.write=function(t,e,r,n,i,o){var s,a,f,h=8*o-i-1,d=(1<>1,u=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,l=n?0:o-1,b=n?1:-1,p=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=d):(s=Math.floor(Math.log(e)/Math.LN2),e*(f=Math.pow(2,-s))<1&&(s--,f*=2),(e+=s+c>=1?u/f:u*Math.pow(2,1-c))*f>=2&&(s++,f/=2),s+c>=d?(a=0,s=d):s+c>=1?(a=(e*f-1)*Math.pow(2,i),s+=c):(a=e*Math.pow(2,c-1)*Math.pow(2,i),s=0));i>=8;t[r+l]=255&a,l+=b,a/=256,i-=8);for(s=s<0;t[r+l]=255&s,l+=b,s/=256,h-=8);t[r+l-b]|=128*p}},1285:t=>{"function"==typeof Object.create?t.exports=function(t,e){e&&(t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}))}:t.exports=function(t,e){if(e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}}},7993:(t,e,r)=>{"use strict";var n=r(1285),i=r(4485),o=r(7834).Buffer,s=new Array(16);function a(){i.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878}function f(t,e){return t<>>32-e}function h(t,e,r,n,i,o,s){return f(t+(e&r|~e&n)+i+o|0,s)+e|0}function d(t,e,r,n,i,o,s){return f(t+(e&n|r&~n)+i+o|0,s)+e|0}function c(t,e,r,n,i,o,s){return f(t+(e^r^n)+i+o|0,s)+e|0}function u(t,e,r,n,i,o,s){return f(t+(r^(e|~n))+i+o|0,s)+e|0}n(a,i),a.prototype._update=function(){for(var t=s,e=0;e<16;++e)t[e]=this._block.readInt32LE(4*e);var r=this._a,n=this._b,i=this._c,o=this._d;r=h(r,n,i,o,t[0],3614090360,7),o=h(o,r,n,i,t[1],3905402710,12),i=h(i,o,r,n,t[2],606105819,17),n=h(n,i,o,r,t[3],3250441966,22),r=h(r,n,i,o,t[4],4118548399,7),o=h(o,r,n,i,t[5],1200080426,12),i=h(i,o,r,n,t[6],2821735955,17),n=h(n,i,o,r,t[7],4249261313,22),r=h(r,n,i,o,t[8],1770035416,7),o=h(o,r,n,i,t[9],2336552879,12),i=h(i,o,r,n,t[10],4294925233,17),n=h(n,i,o,r,t[11],2304563134,22),r=h(r,n,i,o,t[12],1804603682,7),o=h(o,r,n,i,t[13],4254626195,12),i=h(i,o,r,n,t[14],2792965006,17),r=d(r,n=h(n,i,o,r,t[15],1236535329,22),i,o,t[1],4129170786,5),o=d(o,r,n,i,t[6],3225465664,9),i=d(i,o,r,n,t[11],643717713,14),n=d(n,i,o,r,t[0],3921069994,20),r=d(r,n,i,o,t[5],3593408605,5),o=d(o,r,n,i,t[10],38016083,9),i=d(i,o,r,n,t[15],3634488961,14),n=d(n,i,o,r,t[4],3889429448,20),r=d(r,n,i,o,t[9],568446438,5),o=d(o,r,n,i,t[14],3275163606,9),i=d(i,o,r,n,t[3],4107603335,14),n=d(n,i,o,r,t[8],1163531501,20),r=d(r,n,i,o,t[13],2850285829,5),o=d(o,r,n,i,t[2],4243563512,9),i=d(i,o,r,n,t[7],1735328473,14),r=c(r,n=d(n,i,o,r,t[12],2368359562,20),i,o,t[5],4294588738,4),o=c(o,r,n,i,t[8],2272392833,11),i=c(i,o,r,n,t[11],1839030562,16),n=c(n,i,o,r,t[14],4259657740,23),r=c(r,n,i,o,t[1],2763975236,4),o=c(o,r,n,i,t[4],1272893353,11),i=c(i,o,r,n,t[7],4139469664,16),n=c(n,i,o,r,t[10],3200236656,23),r=c(r,n,i,o,t[13],681279174,4),o=c(o,r,n,i,t[0],3936430074,11),i=c(i,o,r,n,t[3],3572445317,16),n=c(n,i,o,r,t[6],76029189,23),r=c(r,n,i,o,t[9],3654602809,4),o=c(o,r,n,i,t[12],3873151461,11),i=c(i,o,r,n,t[15],530742520,16),r=u(r,n=c(n,i,o,r,t[2],3299628645,23),i,o,t[0],4096336452,6),o=u(o,r,n,i,t[7],1126891415,10),i=u(i,o,r,n,t[14],2878612391,15),n=u(n,i,o,r,t[5],4237533241,21),r=u(r,n,i,o,t[12],1700485571,6),o=u(o,r,n,i,t[3],2399980690,10),i=u(i,o,r,n,t[10],4293915773,15),n=u(n,i,o,r,t[1],2240044497,21),r=u(r,n,i,o,t[8],1873313359,6),o=u(o,r,n,i,t[15],4264355552,10),i=u(i,o,r,n,t[6],2734768916,15),n=u(n,i,o,r,t[13],1309151649,21),r=u(r,n,i,o,t[4],4149444226,6),o=u(o,r,n,i,t[11],3174756917,10),i=u(i,o,r,n,t[2],718787259,15),n=u(n,i,o,r,t[9],3951481745,21),this._a=this._a+r|0,this._b=this._b+n|0,this._c=this._c+i|0,this._d=this._d+o|0},a.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var t=o.allocUnsafe(16);return t.writeInt32LE(this._a,0),t.writeInt32LE(this._b,4),t.writeInt32LE(this._c,8),t.writeInt32LE(this._d,12),t},t.exports=a},9561:t=>{function e(t,e){if(!t)throw new Error(e||"Assertion failed")}t.exports=e,e.equal=function(t,e,r){if(t!=e)throw new Error(r||"Assertion failed: "+t+" != "+e)}},3022:(t,e)=>{"use strict";var r=e;function n(t){return 1===t.length?"0"+t:t}function i(t){for(var e="",r=0;r>8,s=255&i;o?r.push(o,s):r.push(s)}return r},r.zero2=n,r.toHex=i,r.encode=function(t,e){return"hex"===e?i(t):t}},4452:t=>{"use strict";var e={};function r(t,r,n){n||(n=Error);var i=function(t){var e,n;function i(e,n,i){return t.call(this,function(t,e,n){return"string"==typeof r?r:r(t,e,n)}(e,n,i))||this}return n=t,(e=i).prototype=Object.create(n.prototype),e.prototype.constructor=e,e.__proto__=n,i}(n);i.prototype.name=n.name,i.prototype.code=t,e[t]=i}function n(t,e){if(Array.isArray(t)){var r=t.length;return t=t.map((function(t){return String(t)})),r>2?"one of ".concat(e," ").concat(t.slice(0,r-1).join(", "),", or ")+t[r-1]:2===r?"one of ".concat(e," ").concat(t[0]," or ").concat(t[1]):"of ".concat(e," ").concat(t[0])}return"of ".concat(e," ").concat(String(t))}r("ERR_INVALID_OPT_VALUE",(function(t,e){return'The value "'+e+'" is invalid for option "'+t+'"'}),TypeError),r("ERR_INVALID_ARG_TYPE",(function(t,e,r){var i,o,s,a,f;if("string"==typeof e&&(o="not ",e.substr(0,4)===o)?(i="must not be",e=e.replace(/^not /,"")):i="must be",function(t,e,r){return(void 0===r||r>t.length)&&(r=t.length),t.substring(r-9,r)===e}(t," argument"))s="The ".concat(t," ").concat(i," ").concat(n(e,"type"));else{var h=("number"!=typeof f&&(f=0),f+1>(a=t).length||-1===a.indexOf(".",f)?"argument":"property");s='The "'.concat(t,'" ').concat(h," ").concat(i," ").concat(n(e,"type"))}return s+". Received type ".concat(typeof r)}),TypeError),r("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF"),r("ERR_METHOD_NOT_IMPLEMENTED",(function(t){return"The "+t+" method is not implemented"})),r("ERR_STREAM_PREMATURE_CLOSE","Premature close"),r("ERR_STREAM_DESTROYED",(function(t){return"Cannot call "+t+" after a stream was destroyed"})),r("ERR_MULTIPLE_CALLBACK","Callback called multiple times"),r("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable"),r("ERR_STREAM_WRITE_AFTER_END","write after end"),r("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError),r("ERR_UNKNOWN_ENCODING",(function(t){return"Unknown encoding: "+t}),TypeError),r("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event"),t.exports.q=e},7073:(t,e,r)=>{"use strict";var n=Object.keys||function(t){var e=[];for(var r in t)e.push(r);return e};t.exports=h;var i=r(8051),o=r(2557);r(1285)(h,i);for(var s=n(o.prototype),a=0;a{"use strict";t.exports=i;var n=r(7640);function i(t){if(!(this instanceof i))return new i(t);n.call(this,t)}r(1285)(i,n),i.prototype._transform=function(t,e,r){r(null,t)}},8051:(t,e,r)=>{"use strict";var n;t.exports=E,E.ReadableState=S,r(2699).EventEmitter;var i,o=function(t,e){return t.listeners(e).length},s=r(5010),a=r(8834).Buffer,f=(void 0!==r.g?r.g:"undefined"!=typeof window?window:"undefined"!=typeof self?self:{}).Uint8Array||function(){},h=r(6602);i=h&&h.debuglog?h.debuglog("stream"):function(){};var d,c,u,l=r(6637),b=r(2262),p=r(7605).getHighWaterMark,g=r(4452).q,m=g.ERR_INVALID_ARG_TYPE,y=g.ERR_STREAM_PUSH_AFTER_EOF,_=g.ERR_METHOD_NOT_IMPLEMENTED,v=g.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;r(1285)(E,s);var w=b.errorOrDestroy,A=["error","close","destroy","pause","resume"];function S(t,e,i){n=n||r(7073),t=t||{},"boolean"!=typeof i&&(i=e instanceof n),this.objectMode=!!t.objectMode,i&&(this.objectMode=this.objectMode||!!t.readableObjectMode),this.highWaterMark=p(this,t,"readableHighWaterMark",i),this.buffer=new l,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=!1!==t.emitClose,this.autoDestroy=!!t.autoDestroy,this.destroyed=!1,this.defaultEncoding=t.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,t.encoding&&(d||(d=r(214).s),this.decoder=new d(t.encoding),this.encoding=t.encoding)}function E(t){if(n=n||r(7073),!(this instanceof E))return new E(t);var e=this instanceof n;this._readableState=new S(t,this,e),this.readable=!0,t&&("function"==typeof t.read&&(this._read=t.read),"function"==typeof t.destroy&&(this._destroy=t.destroy)),s.call(this)}function M(t,e,r,n,o){i("readableAddChunk",e);var s,h=t._readableState;if(null===e)h.reading=!1,function(t,e){if(i("onEofChunk"),!e.ended){if(e.decoder){var r=e.decoder.end();r&&r.length&&(e.buffer.push(r),e.length+=e.objectMode?1:r.length)}e.ended=!0,e.sync?L(t):(e.needReadable=!1,e.emittedReadable||(e.emittedReadable=!0,P(t)))}}(t,h);else if(o||(s=function(t,e){var r,n;return n=e,a.isBuffer(n)||n instanceof f||"string"==typeof e||void 0===e||t.objectMode||(r=new m("chunk",["string","Buffer","Uint8Array"],e)),r}(h,e)),s)w(t,s);else if(h.objectMode||e&&e.length>0)if("string"==typeof e||h.objectMode||Object.getPrototypeOf(e)===a.prototype||(e=function(t){return a.from(t)}(e)),n)h.endEmitted?w(t,new v):I(t,h,e,!0);else if(h.ended)w(t,new y);else{if(h.destroyed)return!1;h.reading=!1,h.decoder&&!r?(e=h.decoder.write(e),h.objectMode||0!==e.length?I(t,h,e,!1):O(t,h)):I(t,h,e,!1)}else n||(h.reading=!1,O(t,h));return!h.ended&&(h.lengthe.highWaterMark&&(e.highWaterMark=function(t){return t>=R?t=R:(t--,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t++),t}(t)),t<=e.length?t:e.ended?e.length:(e.needReadable=!0,0))}function L(t){var e=t._readableState;i("emitReadable",e.needReadable,e.emittedReadable),e.needReadable=!1,e.emittedReadable||(i("emitReadable",e.flowing),e.emittedReadable=!0,process.nextTick(P,t))}function P(t){var e=t._readableState;i("emitReadable_",e.destroyed,e.length,e.ended),e.destroyed||!e.length&&!e.ended||(t.emit("readable"),e.emittedReadable=!1),e.needReadable=!e.flowing&&!e.ended&&e.length<=e.highWaterMark,U(t)}function O(t,e){e.readingMore||(e.readingMore=!0,process.nextTick(x,t,e))}function x(t,e){for(;!e.reading&&!e.ended&&(e.length0,e.resumeScheduled&&!e.paused?e.flowing=!0:t.listenerCount("data")>0&&t.resume()}function B(t){i("readable nexttick read 0"),t.read(0)}function k(t,e){i("resume",e.reading),e.reading||t.read(0),e.resumeScheduled=!1,t.emit("resume"),U(t),e.flowing&&!e.reading&&t.read(0)}function U(t){var e=t._readableState;for(i("flow",e.flowing);e.flowing&&null!==t.read(););}function C(t,e){return 0===e.length?null:(e.objectMode?r=e.buffer.shift():!t||t>=e.length?(r=e.decoder?e.buffer.join(""):1===e.buffer.length?e.buffer.first():e.buffer.concat(e.length),e.buffer.clear()):r=e.buffer.consume(t,e.decoder),r);var r}function D(t){var e=t._readableState;i("endReadable",e.endEmitted),e.endEmitted||(e.ended=!0,process.nextTick(H,e,t))}function H(t,e){if(i("endReadableNT",t.endEmitted,t.length),!t.endEmitted&&0===t.length&&(t.endEmitted=!0,e.readable=!1,e.emit("end"),t.autoDestroy)){var r=e._writableState;(!r||r.autoDestroy&&r.finished)&&e.destroy()}}function z(t,e){for(var r=0,n=t.length;r=e.highWaterMark:e.length>0)||e.ended))return i("read: emitReadable",e.length,e.ended),0===e.length&&e.ended?D(this):L(this),null;if(0===(t=T(t,e))&&e.ended)return 0===e.length&&D(this),null;var n,o=e.needReadable;return i("need readable",o),(0===e.length||e.length-t0?C(t,e):null)?(e.needReadable=e.length<=e.highWaterMark,t=0):(e.length-=t,e.awaitDrain=0),0===e.length&&(e.ended||(e.needReadable=!0),r!==t&&e.ended&&D(this)),null!==n&&this.emit("data",n),n},E.prototype._read=function(t){w(this,new _("_read()"))},E.prototype.pipe=function(t,e){var r=this,n=this._readableState;switch(n.pipesCount){case 0:n.pipes=t;break;case 1:n.pipes=[n.pipes,t];break;default:n.pipes.push(t)}n.pipesCount+=1,i("pipe count=%d opts=%j",n.pipesCount,e);var s=e&&!1===e.end||t===process.stdout||t===process.stderr?b:a;function a(){i("onend"),t.end()}n.endEmitted?process.nextTick(s):r.once("end",s),t.on("unpipe",(function e(o,s){i("onunpipe"),o===r&&s&&!1===s.hasUnpiped&&(s.hasUnpiped=!0,i("cleanup"),t.removeListener("close",u),t.removeListener("finish",l),t.removeListener("drain",f),t.removeListener("error",c),t.removeListener("unpipe",e),r.removeListener("end",a),r.removeListener("end",b),r.removeListener("data",d),h=!0,!n.awaitDrain||t._writableState&&!t._writableState.needDrain||f())}));var f=function(t){return function(){var e=t._readableState;i("pipeOnDrain",e.awaitDrain),e.awaitDrain&&e.awaitDrain--,0===e.awaitDrain&&o(t,"data")&&(e.flowing=!0,U(t))}}(r);t.on("drain",f);var h=!1;function d(e){i("ondata");var o=t.write(e);i("dest.write",o),!1===o&&((1===n.pipesCount&&n.pipes===t||n.pipesCount>1&&-1!==z(n.pipes,t))&&!h&&(i("false write response, pause",n.awaitDrain),n.awaitDrain++),r.pause())}function c(e){i("onerror",e),b(),t.removeListener("error",c),0===o(t,"error")&&w(t,e)}function u(){t.removeListener("finish",l),b()}function l(){i("onfinish"),t.removeListener("close",u),b()}function b(){i("unpipe"),r.unpipe(t)}return r.on("data",d),function(t,e,r){if("function"==typeof t.prependListener)return t.prependListener(e,r);t._events&&t._events[e]?Array.isArray(t._events[e])?t._events[e].unshift(r):t._events[e]=[r,t._events[e]]:t.on(e,r)}(t,"error",c),t.once("close",u),t.once("finish",l),t.emit("pipe",r),n.flowing||(i("pipe resume"),r.resume()),t},E.prototype.unpipe=function(t){var e=this._readableState,r={hasUnpiped:!1};if(0===e.pipesCount)return this;if(1===e.pipesCount)return t&&t!==e.pipes||(t||(t=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,t&&t.emit("unpipe",this,r)),this;if(!t){var n=e.pipes,i=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var o=0;o0,!1!==n.flowing&&this.resume()):"readable"===t&&(n.endEmitted||n.readableListening||(n.readableListening=n.needReadable=!0,n.flowing=!1,n.emittedReadable=!1,i("on readable",n.length,n.reading),n.length?L(this):n.reading||process.nextTick(B,this))),r},E.prototype.addListener=E.prototype.on,E.prototype.removeListener=function(t,e){var r=s.prototype.removeListener.call(this,t,e);return"readable"===t&&process.nextTick(N,this),r},E.prototype.removeAllListeners=function(t){var e=s.prototype.removeAllListeners.apply(this,arguments);return"readable"!==t&&void 0!==t||process.nextTick(N,this),e},E.prototype.resume=function(){var t=this._readableState;return t.flowing||(i("resume"),t.flowing=!t.readableListening,function(t,e){e.resumeScheduled||(e.resumeScheduled=!0,process.nextTick(k,t,e))}(this,t)),t.paused=!1,this},E.prototype.pause=function(){return i("call pause flowing=%j",this._readableState.flowing),!1!==this._readableState.flowing&&(i("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this},E.prototype.wrap=function(t){var e=this,r=this._readableState,n=!1;for(var o in t.on("end",(function(){if(i("wrapped end"),r.decoder&&!r.ended){var t=r.decoder.end();t&&t.length&&e.push(t)}e.push(null)})),t.on("data",(function(o){i("wrapped data"),r.decoder&&(o=r.decoder.write(o)),r.objectMode&&null==o||(r.objectMode||o&&o.length)&&(e.push(o)||(n=!0,t.pause()))})),t)void 0===this[o]&&"function"==typeof t[o]&&(this[o]=function(e){return function(){return t[e].apply(t,arguments)}}(o));for(var s=0;s{"use strict";t.exports=d;var n=r(4452).q,i=n.ERR_METHOD_NOT_IMPLEMENTED,o=n.ERR_MULTIPLE_CALLBACK,s=n.ERR_TRANSFORM_ALREADY_TRANSFORMING,a=n.ERR_TRANSFORM_WITH_LENGTH_0,f=r(7073);function h(t,e){var r=this._transformState;r.transforming=!1;var n=r.writecb;if(null===n)return this.emit("error",new o);r.writechunk=null,r.writecb=null,null!=e&&this.push(e),n(t);var i=this._readableState;i.reading=!1,(i.needReadable||i.length{"use strict";function n(t){var e=this;this.next=null,this.entry=null,this.finish=function(){!function(t,e,r){var n=t.entry;for(t.entry=null;n;){var i=n.callback;e.pendingcb--,i(undefined),n=n.next}e.corkedRequestsFree.next=t}(e,t)}}var i;t.exports=E,E.WritableState=S;var o,s={deprecate:r(5803)},a=r(5010),f=r(8834).Buffer,h=(void 0!==r.g?r.g:"undefined"!=typeof window?window:"undefined"!=typeof self?self:{}).Uint8Array||function(){},d=r(2262),c=r(7605).getHighWaterMark,u=r(4452).q,l=u.ERR_INVALID_ARG_TYPE,b=u.ERR_METHOD_NOT_IMPLEMENTED,p=u.ERR_MULTIPLE_CALLBACK,g=u.ERR_STREAM_CANNOT_PIPE,m=u.ERR_STREAM_DESTROYED,y=u.ERR_STREAM_NULL_VALUES,_=u.ERR_STREAM_WRITE_AFTER_END,v=u.ERR_UNKNOWN_ENCODING,w=d.errorOrDestroy;function A(){}function S(t,e,o){i=i||r(7073),t=t||{},"boolean"!=typeof o&&(o=e instanceof i),this.objectMode=!!t.objectMode,o&&(this.objectMode=this.objectMode||!!t.writableObjectMode),this.highWaterMark=c(this,t,"writableHighWaterMark",o),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var s=!1===t.decodeStrings;this.decodeStrings=!s,this.defaultEncoding=t.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(t){!function(t,e){var r=t._writableState,n=r.sync,i=r.writecb;if("function"!=typeof i)throw new p;if(function(t){t.writing=!1,t.writecb=null,t.length-=t.writelen,t.writelen=0}(r),e)!function(t,e,r,n,i){--e.pendingcb,r?(process.nextTick(i,n),process.nextTick(P,t,e),t._writableState.errorEmitted=!0,w(t,n)):(i(n),t._writableState.errorEmitted=!0,w(t,n),P(t,e))}(t,r,n,e,i);else{var o=T(r)||t.destroyed;o||r.corked||r.bufferProcessing||!r.bufferedRequest||R(t,r),n?process.nextTick(I,t,r,o,i):I(t,r,o,i)}}(e,t)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=!1!==t.emitClose,this.autoDestroy=!!t.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new n(this)}function E(t){var e=this instanceof(i=i||r(7073));if(!e&&!o.call(E,this))return new E(t);this._writableState=new S(t,this,e),this.writable=!0,t&&("function"==typeof t.write&&(this._write=t.write),"function"==typeof t.writev&&(this._writev=t.writev),"function"==typeof t.destroy&&(this._destroy=t.destroy),"function"==typeof t.final&&(this._final=t.final)),a.call(this)}function M(t,e,r,n,i,o,s){e.writelen=n,e.writecb=s,e.writing=!0,e.sync=!0,e.destroyed?e.onwrite(new m("write")):r?t._writev(i,e.onwrite):t._write(i,o,e.onwrite),e.sync=!1}function I(t,e,r,n){r||function(t,e){0===e.length&&e.needDrain&&(e.needDrain=!1,t.emit("drain"))}(t,e),e.pendingcb--,n(),P(t,e)}function R(t,e){e.bufferProcessing=!0;var r=e.bufferedRequest;if(t._writev&&r&&r.next){var i=e.bufferedRequestCount,o=new Array(i),s=e.corkedRequestsFree;s.entry=r;for(var a=0,f=!0;r;)o[a]=r,r.isBuf||(f=!1),r=r.next,a+=1;o.allBuffers=f,M(t,e,!0,e.length,o,"",s.finish),e.pendingcb++,e.lastBufferedRequest=null,s.next?(e.corkedRequestsFree=s.next,s.next=null):e.corkedRequestsFree=new n(e),e.bufferedRequestCount=0}else{for(;r;){var h=r.chunk,d=r.encoding,c=r.callback;if(M(t,e,!1,e.objectMode?1:h.length,h,d,c),r=r.next,e.bufferedRequestCount--,e.writing)break}null===r&&(e.lastBufferedRequest=null)}e.bufferedRequest=r,e.bufferProcessing=!1}function T(t){return t.ending&&0===t.length&&null===t.bufferedRequest&&!t.finished&&!t.writing}function L(t,e){t._final((function(r){e.pendingcb--,r&&w(t,r),e.prefinished=!0,t.emit("prefinish"),P(t,e)}))}function P(t,e){var r=T(e);if(r&&(function(t,e){e.prefinished||e.finalCalled||("function"!=typeof t._final||e.destroyed?(e.prefinished=!0,t.emit("prefinish")):(e.pendingcb++,e.finalCalled=!0,process.nextTick(L,t,e)))}(t,e),0===e.pendingcb&&(e.finished=!0,t.emit("finish"),e.autoDestroy))){var n=t._readableState;(!n||n.autoDestroy&&n.endEmitted)&&t.destroy()}return r}r(1285)(E,a),S.prototype.getBuffer=function(){for(var t=this.bufferedRequest,e=[];t;)e.push(t),t=t.next;return e},function(){try{Object.defineProperty(S.prototype,"buffer",{get:s.deprecate((function(){return this.getBuffer()}),"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(t){}}(),"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(o=Function.prototype[Symbol.hasInstance],Object.defineProperty(E,Symbol.hasInstance,{value:function(t){return!!o.call(this,t)||this===E&&t&&t._writableState instanceof S}})):o=function(t){return t instanceof this},E.prototype.pipe=function(){w(this,new g)},E.prototype.write=function(t,e,r){var n,i=this._writableState,o=!1,s=!i.objectMode&&(n=t,f.isBuffer(n)||n instanceof h);return s&&!f.isBuffer(t)&&(t=function(t){return f.from(t)}(t)),"function"==typeof e&&(r=e,e=null),s?e="buffer":e||(e=i.defaultEncoding),"function"!=typeof r&&(r=A),i.ending?function(t,e){var r=new _;w(t,r),process.nextTick(e,r)}(this,r):(s||function(t,e,r,n){var i;return null===r?i=new y:"string"==typeof r||e.objectMode||(i=new l("chunk",["string","Buffer"],r)),!i||(w(t,i),process.nextTick(n,i),!1)}(this,i,t,r))&&(i.pendingcb++,o=function(t,e,r,n,i,o){if(!r){var s=function(t,e,r){return t.objectMode||!1===t.decodeStrings||"string"!=typeof e||(e=f.from(e,r)),e}(e,n,i);n!==s&&(r=!0,i="buffer",n=s)}var a=e.objectMode?1:n.length;e.length+=a;var h=e.length-1))throw new v(t);return this._writableState.defaultEncoding=t,this},Object.defineProperty(E.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}}),Object.defineProperty(E.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),E.prototype._write=function(t,e,r){r(new b("_write()"))},E.prototype._writev=null,E.prototype.end=function(t,e,r){var n=this._writableState;return"function"==typeof t?(r=t,t=null,e=null):"function"==typeof e&&(r=e,e=null),null!=t&&this.write(t,e),n.corked&&(n.corked=1,this.uncork()),n.ending||function(t,e,r){e.ending=!0,P(t,e),r&&(e.finished?process.nextTick(r):t.once("finish",r)),e.ended=!0,t.writable=!1}(this,n,r),this},Object.defineProperty(E.prototype,"writableLength",{enumerable:!1,get:function(){return this._writableState.length}}),Object.defineProperty(E.prototype,"destroyed",{enumerable:!1,get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(t){this._writableState&&(this._writableState.destroyed=t)}}),E.prototype.destroy=d.destroy,E.prototype._undestroy=d.undestroy,E.prototype._destroy=function(t,e){e(t)}},1029:(t,e,r)=>{"use strict";var n;function i(t,e,r){return(e=function(t){var e=function(t,e){if("object"!=typeof t||null===t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==typeof e?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var o=r(9885),s=Symbol("lastResolve"),a=Symbol("lastReject"),f=Symbol("error"),h=Symbol("ended"),d=Symbol("lastPromise"),c=Symbol("handlePromise"),u=Symbol("stream");function l(t,e){return{value:t,done:e}}function b(t){var e=t[s];if(null!==e){var r=t[u].read();null!==r&&(t[d]=null,t[s]=null,t[a]=null,e(l(r,!1)))}}function p(t){process.nextTick(b,t)}var g=Object.getPrototypeOf((function(){})),m=Object.setPrototypeOf((i(n={get stream(){return this[u]},next:function(){var t=this,e=this[f];if(null!==e)return Promise.reject(e);if(this[h])return Promise.resolve(l(void 0,!0));if(this[u].destroyed)return new Promise((function(e,r){process.nextTick((function(){t[f]?r(t[f]):e(l(void 0,!0))}))}));var r,n=this[d];if(n)r=new Promise(function(t,e){return function(r,n){t.then((function(){e[h]?r(l(void 0,!0)):e[c](r,n)}),n)}}(n,this));else{var i=this[u].read();if(null!==i)return Promise.resolve(l(i,!1));r=new Promise(this[c])}return this[d]=r,r}},Symbol.asyncIterator,(function(){return this})),i(n,"return",(function(){var t=this;return new Promise((function(e,r){t[u].destroy(null,(function(t){t?r(t):e(l(void 0,!0))}))}))})),n),g);t.exports=function(t){var e,r=Object.create(m,(i(e={},u,{value:t,writable:!0}),i(e,s,{value:null,writable:!0}),i(e,a,{value:null,writable:!0}),i(e,f,{value:null,writable:!0}),i(e,h,{value:t._readableState.endEmitted,writable:!0}),i(e,c,{value:function(t,e){var n=r[u].read();n?(r[d]=null,r[s]=null,r[a]=null,t(l(n,!1))):(r[s]=t,r[a]=e)},writable:!0}),e));return r[d]=null,o(t,(function(t){if(t&&"ERR_STREAM_PREMATURE_CLOSE"!==t.code){var e=r[a];return null!==e&&(r[d]=null,r[s]=null,r[a]=null,e(t)),void(r[f]=t)}var n=r[s];null!==n&&(r[d]=null,r[s]=null,r[a]=null,n(l(void 0,!0))),r[h]=!0})),t.on("readable",p.bind(null,r)),r}},6637:(t,e,r)=>{"use strict";function n(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function i(t){for(var e=1;e0?this.tail.next=e:this.head=e,this.tail=e,++this.length}},{key:"unshift",value:function(t){var e={data:t,next:this.head};0===this.length&&(this.tail=e),this.head=e,++this.length}},{key:"shift",value:function(){if(0!==this.length){var t=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,t}}},{key:"clear",value:function(){this.head=this.tail=null,this.length=0}},{key:"join",value:function(t){if(0===this.length)return"";for(var e=this.head,r=""+e.data;e=e.next;)r+=t+e.data;return r}},{key:"concat",value:function(t){if(0===this.length)return f.alloc(0);for(var e,r,n,i=f.allocUnsafe(t>>>0),o=this.head,s=0;o;)e=o.data,r=i,n=s,f.prototype.copy.call(e,r,n),s+=o.data.length,o=o.next;return i}},{key:"consume",value:function(t,e){var r;return ti.length?i.length:t;if(o===i.length?n+=i:n+=i.slice(0,t),0==(t-=o)){o===i.length?(++r,e.next?this.head=e.next:this.head=this.tail=null):(this.head=e,e.data=i.slice(o));break}++r}return this.length-=r,n}},{key:"_getBuffer",value:function(t){var e=f.allocUnsafe(t),r=this.head,n=1;for(r.data.copy(e),t-=r.data.length;r=r.next;){var i=r.data,o=t>i.length?i.length:t;if(i.copy(e,e.length-t,0,o),0==(t-=o)){o===i.length?(++n,r.next?this.head=r.next:this.head=this.tail=null):(this.head=r,r.data=i.slice(o));break}++n}return this.length-=n,e}},{key:d,value:function(t,e){return h(this,i(i({},e),{},{depth:0,customInspect:!1}))}}])&&s(e.prototype,r),Object.defineProperty(e,"prototype",{writable:!1}),t}()},2262:t=>{"use strict";function e(t,e){n(t,e),r(t)}function r(t){t._writableState&&!t._writableState.emitClose||t._readableState&&!t._readableState.emitClose||t.emit("close")}function n(t,e){t.emit("error",e)}t.exports={destroy:function(t,i){var o=this,s=this._readableState&&this._readableState.destroyed,a=this._writableState&&this._writableState.destroyed;return s||a?(i?i(t):t&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,process.nextTick(n,this,t)):process.nextTick(n,this,t)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(t||null,(function(t){!i&&t?o._writableState?o._writableState.errorEmitted?process.nextTick(r,o):(o._writableState.errorEmitted=!0,process.nextTick(e,o,t)):process.nextTick(e,o,t):i?(process.nextTick(r,o),i(t)):process.nextTick(r,o)})),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)},errorOrDestroy:function(t,e){var r=t._readableState,n=t._writableState;r&&r.autoDestroy||n&&n.autoDestroy?t.destroy(e):t.emit("error",e)}}},9885:(t,e,r)=>{"use strict";var n=r(4452).q.ERR_STREAM_PREMATURE_CLOSE;function i(){}t.exports=function t(e,r,o){if("function"==typeof r)return t(e,null,r);r||(r={}),o=function(t){var e=!1;return function(){if(!e){e=!0;for(var r=arguments.length,n=new Array(r),i=0;i{t.exports=function(){throw new Error("Readable.from is not available in the browser")}},3495:(t,e,r)=>{"use strict";var n,i=r(4452).q,o=i.ERR_MISSING_ARGS,s=i.ERR_STREAM_DESTROYED;function a(t){if(t)throw t}function f(t){t()}function h(t,e){return t.pipe(e)}t.exports=function(){for(var t=arguments.length,e=new Array(t),i=0;i0,(function(t){d||(d=t),t&&u.forEach(f),o||(u.forEach(f),c(d))}))}));return e.reduce(h)}},7605:(t,e,r)=>{"use strict";var n=r(4452).q.ERR_INVALID_OPT_VALUE;t.exports={getHighWaterMark:function(t,e,r,i){var o=function(t,e,r){return null!=t.highWaterMark?t.highWaterMark:e?t[r]:null}(e,i,r);if(null!=o){if(!isFinite(o)||Math.floor(o)!==o||o<0)throw new n(i?r:"highWaterMark",o);return Math.floor(o)}return t.objectMode?16:16384}}},5010:(t,e,r)=>{t.exports=r(2699).EventEmitter},7525:(t,e,r)=>{(e=t.exports=r(8051)).Stream=e,e.Readable=e,e.Writable=r(2557),e.Duplex=r(7073),e.Transform=r(7640),e.PassThrough=r(5163),e.finished=r(9885),e.pipeline=r(3495)},1445:(t,e,r)=>{"use strict";var n=r(8834).Buffer,i=r(1285),o=r(4485),s=new Array(16),a=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],f=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],h=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],d=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11],c=[0,1518500249,1859775393,2400959708,2840853838],u=[1352829926,1548603684,1836072691,2053994217,0];function l(){o.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520}function b(t,e){return t<>>32-e}function p(t,e,r,n,i,o,s,a){return b(t+(e^r^n)+o+s|0,a)+i|0}function g(t,e,r,n,i,o,s,a){return b(t+(e&r|~e&n)+o+s|0,a)+i|0}function m(t,e,r,n,i,o,s,a){return b(t+((e|~r)^n)+o+s|0,a)+i|0}function y(t,e,r,n,i,o,s,a){return b(t+(e&n|r&~n)+o+s|0,a)+i|0}function _(t,e,r,n,i,o,s,a){return b(t+(e^(r|~n))+o+s|0,a)+i|0}i(l,o),l.prototype._update=function(){for(var t=s,e=0;e<16;++e)t[e]=this._block.readInt32LE(4*e);for(var r=0|this._a,n=0|this._b,i=0|this._c,o=0|this._d,l=0|this._e,v=0|this._a,w=0|this._b,A=0|this._c,S=0|this._d,E=0|this._e,M=0;M<80;M+=1){var I,R;M<16?(I=p(r,n,i,o,l,t[a[M]],c[0],h[M]),R=_(v,w,A,S,E,t[f[M]],u[0],d[M])):M<32?(I=g(r,n,i,o,l,t[a[M]],c[1],h[M]),R=y(v,w,A,S,E,t[f[M]],u[1],d[M])):M<48?(I=m(r,n,i,o,l,t[a[M]],c[2],h[M]),R=m(v,w,A,S,E,t[f[M]],u[2],d[M])):M<64?(I=y(r,n,i,o,l,t[a[M]],c[3],h[M]),R=g(v,w,A,S,E,t[f[M]],u[3],d[M])):(I=_(r,n,i,o,l,t[a[M]],c[4],h[M]),R=p(v,w,A,S,E,t[f[M]],u[4],d[M])),r=l,l=o,o=b(i,10),i=n,n=I,v=E,E=S,S=b(A,10),A=w,w=R}var T=this._b+i+S|0;this._b=this._c+o+E|0,this._c=this._d+l+v|0,this._d=this._e+r+w|0,this._e=this._a+n+A|0,this._a=T},l.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var t=n.alloc?n.alloc(20):new n(20);return t.writeInt32LE(this._a,0),t.writeInt32LE(this._b,4),t.writeInt32LE(this._c,8),t.writeInt32LE(this._d,12),t.writeInt32LE(this._e,16),t},t.exports=l},7834:(t,e,r)=>{var n=r(8834),i=n.Buffer;function o(t,e){for(var r in t)e[r]=t[r]}function s(t,e,r){return i(t,e,r)}i.from&&i.alloc&&i.allocUnsafe&&i.allocUnsafeSlow?t.exports=n:(o(n,e),e.Buffer=s),s.prototype=Object.create(i.prototype),o(i,s),s.from=function(t,e,r){if("number"==typeof t)throw new TypeError("Argument must not be a number");return i(t,e,r)},s.alloc=function(t,e,r){if("number"!=typeof t)throw new TypeError("Argument must be a number");var n=i(t);return void 0!==e?"string"==typeof r?n.fill(e,r):n.fill(e):n.fill(0),n},s.allocUnsafe=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return i(t)},s.allocUnsafeSlow=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return n.SlowBuffer(t)}},3327:(t,e,r)=>{var n=r(7834).Buffer;function i(t,e){this._block=n.alloc(t),this._finalSize=e,this._blockSize=t,this._len=0}i.prototype.update=function(t,e){"string"==typeof t&&(e=e||"utf8",t=n.from(t,e));for(var r=this._block,i=this._blockSize,o=t.length,s=this._len,a=0;a=this._finalSize&&(this._update(this._block),this._block.fill(0));var r=8*this._len;if(r<=4294967295)this._block.writeUInt32BE(r,this._blockSize-4);else{var n=(4294967295&r)>>>0,i=(r-n)/4294967296;this._block.writeUInt32BE(i,this._blockSize-8),this._block.writeUInt32BE(n,this._blockSize-4)}this._update(this._block);var o=this._hash();return t?o.toString(t):o},i.prototype._update=function(){throw new Error("_update must be implemented by subclass")},t.exports=i},9065:(t,e,r)=>{var n=t.exports=function(t){t=t.toLowerCase();var e=n[t];if(!e)throw new Error(t+" is not supported (we accept pull requests)");return new e};n.sha=r(8820),n.sha1=r(7885),n.sha224=r(8321),n.sha256=r(4424),n.sha384=r(213),n.sha512=r(5596)},8820:(t,e,r)=>{var n=r(1285),i=r(3327),o=r(7834).Buffer,s=[1518500249,1859775393,-1894007588,-899497514],a=new Array(80);function f(){this.init(),this._w=a,i.call(this,64,56)}function h(t){return t<<30|t>>>2}function d(t,e,r,n){return 0===t?e&r|~e&n:2===t?e&r|e&n|r&n:e^r^n}n(f,i),f.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},f.prototype._update=function(t){for(var e,r=this._w,n=0|this._a,i=0|this._b,o=0|this._c,a=0|this._d,f=0|this._e,c=0;c<16;++c)r[c]=t.readInt32BE(4*c);for(;c<80;++c)r[c]=r[c-3]^r[c-8]^r[c-14]^r[c-16];for(var u=0;u<80;++u){var l=~~(u/20),b=0|((e=n)<<5|e>>>27)+d(l,i,o,a)+f+r[u]+s[l];f=a,a=o,o=h(i),i=n,n=b}this._a=n+this._a|0,this._b=i+this._b|0,this._c=o+this._c|0,this._d=a+this._d|0,this._e=f+this._e|0},f.prototype._hash=function(){var t=o.allocUnsafe(20);return t.writeInt32BE(0|this._a,0),t.writeInt32BE(0|this._b,4),t.writeInt32BE(0|this._c,8),t.writeInt32BE(0|this._d,12),t.writeInt32BE(0|this._e,16),t},t.exports=f},7885:(t,e,r)=>{var n=r(1285),i=r(3327),o=r(7834).Buffer,s=[1518500249,1859775393,-1894007588,-899497514],a=new Array(80);function f(){this.init(),this._w=a,i.call(this,64,56)}function h(t){return t<<5|t>>>27}function d(t){return t<<30|t>>>2}function c(t,e,r,n){return 0===t?e&r|~e&n:2===t?e&r|e&n|r&n:e^r^n}n(f,i),f.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},f.prototype._update=function(t){for(var e,r=this._w,n=0|this._a,i=0|this._b,o=0|this._c,a=0|this._d,f=0|this._e,u=0;u<16;++u)r[u]=t.readInt32BE(4*u);for(;u<80;++u)r[u]=(e=r[u-3]^r[u-8]^r[u-14]^r[u-16])<<1|e>>>31;for(var l=0;l<80;++l){var b=~~(l/20),p=h(n)+c(b,i,o,a)+f+r[l]+s[b]|0;f=a,a=o,o=d(i),i=n,n=p}this._a=n+this._a|0,this._b=i+this._b|0,this._c=o+this._c|0,this._d=a+this._d|0,this._e=f+this._e|0},f.prototype._hash=function(){var t=o.allocUnsafe(20);return t.writeInt32BE(0|this._a,0),t.writeInt32BE(0|this._b,4),t.writeInt32BE(0|this._c,8),t.writeInt32BE(0|this._d,12),t.writeInt32BE(0|this._e,16),t},t.exports=f},8321:(t,e,r)=>{var n=r(1285),i=r(4424),o=r(3327),s=r(7834).Buffer,a=new Array(64);function f(){this.init(),this._w=a,o.call(this,64,56)}n(f,i),f.prototype.init=function(){return this._a=3238371032,this._b=914150663,this._c=812702999,this._d=4144912697,this._e=4290775857,this._f=1750603025,this._g=1694076839,this._h=3204075428,this},f.prototype._hash=function(){var t=s.allocUnsafe(28);return t.writeInt32BE(this._a,0),t.writeInt32BE(this._b,4),t.writeInt32BE(this._c,8),t.writeInt32BE(this._d,12),t.writeInt32BE(this._e,16),t.writeInt32BE(this._f,20),t.writeInt32BE(this._g,24),t},t.exports=f},4424:(t,e,r)=>{var n=r(1285),i=r(3327),o=r(7834).Buffer,s=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],a=new Array(64);function f(){this.init(),this._w=a,i.call(this,64,56)}function h(t,e,r){return r^t&(e^r)}function d(t,e,r){return t&e|r&(t|e)}function c(t){return(t>>>2|t<<30)^(t>>>13|t<<19)^(t>>>22|t<<10)}function u(t){return(t>>>6|t<<26)^(t>>>11|t<<21)^(t>>>25|t<<7)}function l(t){return(t>>>7|t<<25)^(t>>>18|t<<14)^t>>>3}n(f,i),f.prototype.init=function(){return this._a=1779033703,this._b=3144134277,this._c=1013904242,this._d=2773480762,this._e=1359893119,this._f=2600822924,this._g=528734635,this._h=1541459225,this},f.prototype._update=function(t){for(var e,r=this._w,n=0|this._a,i=0|this._b,o=0|this._c,a=0|this._d,f=0|this._e,b=0|this._f,p=0|this._g,g=0|this._h,m=0;m<16;++m)r[m]=t.readInt32BE(4*m);for(;m<64;++m)r[m]=0|(((e=r[m-2])>>>17|e<<15)^(e>>>19|e<<13)^e>>>10)+r[m-7]+l(r[m-15])+r[m-16];for(var y=0;y<64;++y){var _=g+u(f)+h(f,b,p)+s[y]+r[y]|0,v=c(n)+d(n,i,o)|0;g=p,p=b,b=f,f=a+_|0,a=o,o=i,i=n,n=_+v|0}this._a=n+this._a|0,this._b=i+this._b|0,this._c=o+this._c|0,this._d=a+this._d|0,this._e=f+this._e|0,this._f=b+this._f|0,this._g=p+this._g|0,this._h=g+this._h|0},f.prototype._hash=function(){var t=o.allocUnsafe(32);return t.writeInt32BE(this._a,0),t.writeInt32BE(this._b,4),t.writeInt32BE(this._c,8),t.writeInt32BE(this._d,12),t.writeInt32BE(this._e,16),t.writeInt32BE(this._f,20),t.writeInt32BE(this._g,24),t.writeInt32BE(this._h,28),t},t.exports=f},213:(t,e,r)=>{var n=r(1285),i=r(5596),o=r(3327),s=r(7834).Buffer,a=new Array(160);function f(){this.init(),this._w=a,o.call(this,128,112)}n(f,i),f.prototype.init=function(){return this._ah=3418070365,this._bh=1654270250,this._ch=2438529370,this._dh=355462360,this._eh=1731405415,this._fh=2394180231,this._gh=3675008525,this._hh=1203062813,this._al=3238371032,this._bl=914150663,this._cl=812702999,this._dl=4144912697,this._el=4290775857,this._fl=1750603025,this._gl=1694076839,this._hl=3204075428,this},f.prototype._hash=function(){var t=s.allocUnsafe(48);function e(e,r,n){t.writeInt32BE(e,n),t.writeInt32BE(r,n+4)}return e(this._ah,this._al,0),e(this._bh,this._bl,8),e(this._ch,this._cl,16),e(this._dh,this._dl,24),e(this._eh,this._el,32),e(this._fh,this._fl,40),t},t.exports=f},5596:(t,e,r)=>{var n=r(1285),i=r(3327),o=r(7834).Buffer,s=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],a=new Array(160);function f(){this.init(),this._w=a,i.call(this,128,112)}function h(t,e,r){return r^t&(e^r)}function d(t,e,r){return t&e|r&(t|e)}function c(t,e){return(t>>>28|e<<4)^(e>>>2|t<<30)^(e>>>7|t<<25)}function u(t,e){return(t>>>14|e<<18)^(t>>>18|e<<14)^(e>>>9|t<<23)}function l(t,e){return(t>>>1|e<<31)^(t>>>8|e<<24)^t>>>7}function b(t,e){return(t>>>1|e<<31)^(t>>>8|e<<24)^(t>>>7|e<<25)}function p(t,e){return(t>>>19|e<<13)^(e>>>29|t<<3)^t>>>6}function g(t,e){return(t>>>19|e<<13)^(e>>>29|t<<3)^(t>>>6|e<<26)}function m(t,e){return t>>>0>>0?1:0}n(f,i),f.prototype.init=function(){return this._ah=1779033703,this._bh=3144134277,this._ch=1013904242,this._dh=2773480762,this._eh=1359893119,this._fh=2600822924,this._gh=528734635,this._hh=1541459225,this._al=4089235720,this._bl=2227873595,this._cl=4271175723,this._dl=1595750129,this._el=2917565137,this._fl=725511199,this._gl=4215389547,this._hl=327033209,this},f.prototype._update=function(t){for(var e=this._w,r=0|this._ah,n=0|this._bh,i=0|this._ch,o=0|this._dh,a=0|this._eh,f=0|this._fh,y=0|this._gh,_=0|this._hh,v=0|this._al,w=0|this._bl,A=0|this._cl,S=0|this._dl,E=0|this._el,M=0|this._fl,I=0|this._gl,R=0|this._hl,T=0;T<32;T+=2)e[T]=t.readInt32BE(4*T),e[T+1]=t.readInt32BE(4*T+4);for(;T<160;T+=2){var L=e[T-30],P=e[T-30+1],O=l(L,P),x=b(P,L),N=p(L=e[T-4],P=e[T-4+1]),B=g(P,L),k=e[T-14],U=e[T-14+1],C=e[T-32],D=e[T-32+1],H=x+U|0,z=O+k+m(H,x)|0;z=(z=z+N+m(H=H+B|0,B)|0)+C+m(H=H+D|0,D)|0,e[T]=z,e[T+1]=H}for(var j=0;j<160;j+=2){z=e[j],H=e[j+1];var q=d(r,n,i),K=d(v,w,A),F=c(r,v),Z=c(v,r),G=u(a,E),$=u(E,a),V=s[j],X=s[j+1],W=h(a,f,y),Y=h(E,M,I),J=R+$|0,Q=_+G+m(J,R)|0;Q=(Q=(Q=Q+W+m(J=J+Y|0,Y)|0)+V+m(J=J+X|0,X)|0)+z+m(J=J+H|0,H)|0;var tt=Z+K|0,et=F+q+m(tt,Z)|0;_=y,R=I,y=f,I=M,f=a,M=E,a=o+Q+m(E=S+J|0,S)|0,o=i,S=A,i=n,A=w,n=r,w=v,r=Q+et+m(v=J+tt|0,J)|0}this._al=this._al+v|0,this._bl=this._bl+w|0,this._cl=this._cl+A|0,this._dl=this._dl+S|0,this._el=this._el+E|0,this._fl=this._fl+M|0,this._gl=this._gl+I|0,this._hl=this._hl+R|0,this._ah=this._ah+r+m(this._al,v)|0,this._bh=this._bh+n+m(this._bl,w)|0,this._ch=this._ch+i+m(this._cl,A)|0,this._dh=this._dh+o+m(this._dl,S)|0,this._eh=this._eh+a+m(this._el,E)|0,this._fh=this._fh+f+m(this._fl,M)|0,this._gh=this._gh+y+m(this._gl,I)|0,this._hh=this._hh+_+m(this._hl,R)|0},f.prototype._hash=function(){var t=o.allocUnsafe(64);function e(e,r,n){t.writeInt32BE(e,n),t.writeInt32BE(r,n+4)}return e(this._ah,this._al,0),e(this._bh,this._bl,8),e(this._ch,this._cl,16),e(this._dh,this._dl,24),e(this._eh,this._el,32),e(this._fh,this._fl,40),e(this._gh,this._gl,48),e(this._hh,this._hl,56),t},t.exports=f},4851:(t,e,r)=>{t.exports=i;var n=r(2699).EventEmitter;function i(){n.call(this)}r(1285)(i,n),i.Readable=r(8051),i.Writable=r(2557),i.Duplex=r(7073),i.Transform=r(7640),i.PassThrough=r(5163),i.finished=r(9885),i.pipeline=r(3495),i.Stream=i,i.prototype.pipe=function(t,e){var r=this;function i(e){t.writable&&!1===t.write(e)&&r.pause&&r.pause()}function o(){r.readable&&r.resume&&r.resume()}r.on("data",i),t.on("drain",o),t._isStdio||e&&!1===e.end||(r.on("end",a),r.on("close",f));var s=!1;function a(){s||(s=!0,t.end())}function f(){s||(s=!0,"function"==typeof t.destroy&&t.destroy())}function h(t){if(d(),0===n.listenerCount(this,"error"))throw t}function d(){r.removeListener("data",i),t.removeListener("drain",o),r.removeListener("end",a),r.removeListener("close",f),r.removeListener("error",h),t.removeListener("error",h),r.removeListener("end",d),r.removeListener("close",d),t.removeListener("close",d)}return r.on("error",h),t.on("error",h),r.on("end",d),r.on("close",d),t.on("close",d),t.emit("pipe",r),t}},214:(t,e,r)=>{"use strict";var n=r(7834).Buffer,i=n.isEncoding||function(t){switch((t=""+t)&&t.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function o(t){var e;switch(this.encoding=function(t){var e=function(t){if(!t)return"utf8";for(var e;;)switch(t){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return t;default:if(e)return;t=(""+t).toLowerCase(),e=!0}}(t);if("string"!=typeof e&&(n.isEncoding===i||!i(t)))throw new Error("Unknown encoding: "+t);return e||t}(t),this.encoding){case"utf16le":this.text=f,this.end=h,e=4;break;case"utf8":this.fillLast=a,e=4;break;case"base64":this.text=d,this.end=c,e=3;break;default:return this.write=u,void(this.end=l)}this.lastNeed=0,this.lastTotal=0,this.lastChar=n.allocUnsafe(e)}function s(t){return t<=127?0:t>>5==6?2:t>>4==14?3:t>>3==30?4:t>>6==2?-1:-2}function a(t){var e=this.lastTotal-this.lastNeed,r=function(t,e,r){if(128!=(192&e[0]))return t.lastNeed=0,"�";if(t.lastNeed>1&&e.length>1){if(128!=(192&e[1]))return t.lastNeed=1,"�";if(t.lastNeed>2&&e.length>2&&128!=(192&e[2]))return t.lastNeed=2,"�"}}(this,t);return void 0!==r?r:this.lastNeed<=t.length?(t.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(t.copy(this.lastChar,e,0,t.length),void(this.lastNeed-=t.length))}function f(t,e){if((t.length-e)%2==0){var r=t.toString("utf16le",e);if(r){var n=r.charCodeAt(r.length-1);if(n>=55296&&n<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=t[t.length-1],t.toString("utf16le",e,t.length-1)}function h(t){var e=t&&t.length?this.write(t):"";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return e+this.lastChar.toString("utf16le",0,r)}return e}function d(t,e){var r=(t.length-e)%3;return 0===r?t.toString("base64",e):(this.lastNeed=3-r,this.lastTotal=3,1===r?this.lastChar[0]=t[t.length-1]:(this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1]),t.toString("base64",e,t.length-r))}function c(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+this.lastChar.toString("base64",0,3-this.lastNeed):e}function u(t){return t.toString(this.encoding)}function l(t){return t&&t.length?this.write(t):""}e.s=o,o.prototype.write=function(t){if(0===t.length)return"";var e,r;if(this.lastNeed){if(void 0===(e=this.fillLast(t)))return"";r=this.lastNeed,this.lastNeed=0}else r=0;return r=0?(i>0&&(t.lastNeed=i-1),i):--n=0?(i>0&&(t.lastNeed=i-2),i):--n=0?(i>0&&(2===i?i=0:t.lastNeed=i-3),i):0}(this,t,e);if(!this.lastNeed)return t.toString("utf8",e);this.lastTotal=r;var n=t.length-(r-this.lastNeed);return t.copy(this.lastChar,0,n),t.toString("utf8",e,n)},o.prototype.fillLast=function(t){if(this.lastNeed<=t.length)return t.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);t.copy(this.lastChar,this.lastTotal-this.lastNeed,0,t.length),this.lastNeed-=t.length}},8743:(t,e,r)=>{var n=r(8834).Buffer;t.exports=function(t){return ArrayBuffer.isView(t)?n.from(t.buffer,t.byteOffset,t.byteLength):n.from(t)}},5803:(t,e,r)=>{function n(t){try{if(!r.g.localStorage)return!1}catch(t){return!1}var e=r.g.localStorage[t];return null!=e&&"true"===String(e).toLowerCase()}t.exports=function(t,e){if(n("noDeprecation"))return t;var r=!1;return function(){if(!r){if(n("throwDeprecation"))throw new Error(e);n("traceDeprecation")?console.trace(e):console.warn(e),r=!0}return t.apply(this,arguments)}}},5477:()=>{},3196:()=>{},8087:()=>{},4854:()=>{},6602:()=>{},763:t=>{"use strict";t.exports={i8:"6.5.4"}}},e={};function r(n){var i=e[n];if(void 0!==i)return i.exports;var o=e[n]={id:n,loaded:!1,exports:{}};return t[n].call(o.exports,o,o.exports,r),o.loaded=!0,o.exports}r.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return r.d(e,{a:e}),e},r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.nmd=t=>(t.paths=[],t.children||(t.children=[]),t);var n={};(()=>{"use strict";r.r(n),r.d(n,{CODEC:()=>i,LocalForger:()=>_e,ProtocolsHash:()=>pe,Uint8ArrayConsumer:()=>at,VERSION:()=>ge,decoders:()=>ce,encoders:()=>ue,getCodec:()=>ye,localForger:()=>ve,opMapping:()=>o,opMappingReverse:()=>s});const t=t=>t.reduce(((t,e)=>t+e.toString(16).padStart(2,"0")),""),e=(t,e=8)=>t.toString(16).padStart(e,"0");var i;!function(t){t.SECRET="secret",t.RAW="raw",t.TZ1="tz1",t.BRANCH="branch",t.ZARITH="zarith",t.PUBLIC_KEY="public_key",t.PKH="pkh",t.DELEGATE="delegate",t.SCRIPT="script",t.BALLOT_STATEMENT="ballotStmt",t.PROPOSAL="proposal",t.PROPOSAL_ARR="proposalArr",t.INT32="int32",t.INT16="int16",t.PARAMETERS="parameters",t.ADDRESS="address",t.SMART_CONTRACT_ADDRESS="smart_contract_address",t.SMART_ROLLUP_ADDRESS="smart_rollup_address",t.SMART_ROLLUP_COMMITMENT_HASH="smart_rollup_commitment_hash",t.VALUE="value",t.PADDED_BYTES="padded_bytes",t.SMART_ROLLUP_MESSAGE="smart_rollup_message",t.MANAGER="manager",t.BLOCK_PAYLOAD_HASH="blockPayloadHash",t.ENTRYPOINT="entrypoint",t.OPERATION="operation",t.OP_ACTIVATE_ACCOUNT="activate_account",t.OP_DELEGATION="delegation",t.OP_TRANSACTION="transaction",t.OP_ORIGINATION="origination",t.OP_BALLOT="ballot",t.OP_ENDORSEMENT="endorsement",t.OP_SEED_NONCE_REVELATION="seed_nonce_revelation",t.OP_REVEAL="reveal",t.OP_PROPOSALS="proposals",t.OP_REGISTER_GLOBAL_CONSTANT="register_global_constant",t.OP_TRANSFER_TICKET="transfer_ticket",t.OP_TX_ROLLUP_ORIGINATION="tx_rollup_origination",t.OP_TX_ROLLUP_SUBMIT_BATCH="tx_rollup_submit_batch",t.BURN_LIMIT="burn_limit",t.TX_ROLLUP_ORIGINATION_PARAM="tx_rollup_origination_param",t.TX_ROLLUP_ID="tx_rollup_id",t.TX_ROLLUP_BATCH_CONTENT="tx_rollup_batch_content",t.OP_INCREASE_PAID_STORAGE="increase_paid_storage",t.OP_UPDATE_CONSENSUS_KEY="update_consensus_key",t.OP_DRAIN_DELEGATE="drain_delegate",t.DEPOSITS_LIMIT="deposits_limit",t.OP_SET_DEPOSITS_LIMIT="set_deposits_limit",t.OP_SMART_ROLLUP_ORIGINATE="smart_rollup_originate",t.PVM_KIND="pvm_kind",t.OP_SMART_ROLLUP_ADD_MESSAGES="smart_rollup_add_messages",t.OP_SMART_ROLLUP_EXECUTE_OUTBOX_MESSAGE="smart_rollup_execute_outbox_message"}(i||(i={}));const o={"00":"parameter","01":"storage","02":"code","03":"False","04":"Elt","05":"Left","06":"None","07":"Pair","08":"Right","09":"Some","0a":"True","0b":"Unit","0c":"PACK","0d":"UNPACK","0e":"BLAKE2B","0f":"SHA256",10:"SHA512",11:"ABS",12:"ADD",13:"AMOUNT",14:"AND",15:"BALANCE",16:"CAR",17:"CDR",18:"CHECK_SIGNATURE",19:"COMPARE","1a":"CONCAT","1b":"CONS","1c":"CREATE_ACCOUNT","1d":"CREATE_CONTRACT","1e":"IMPLICIT_ACCOUNT","1f":"DIP",20:"DROP",21:"DUP",22:"EDIV",23:"EMPTY_MAP",24:"EMPTY_SET",25:"EQ",26:"EXEC",27:"FAILWITH",28:"GE",29:"GET","2a":"GT","2b":"HASH_KEY","2c":"IF","2d":"IF_CONS","2e":"IF_LEFT","2f":"IF_NONE",30:"INT",31:"LAMBDA",32:"LE",33:"LEFT",34:"LOOP",35:"LSL",36:"LSR",37:"LT",38:"MAP",39:"MEM","3a":"MUL","3b":"NEG","3c":"NEQ","3d":"NIL","3e":"NONE","3f":"NOT",40:"NOW",41:"OR",42:"PAIR",43:"PUSH",44:"RIGHT",45:"SIZE",46:"SOME",47:"SOURCE",48:"SENDER",49:"SELF","4a":"STEPS_TO_QUOTA","4b":"SUB","4c":"SWAP","4d":"TRANSFER_TOKENS","4e":"SET_DELEGATE","4f":"UNIT",50:"UPDATE",51:"XOR",52:"ITER",53:"LOOP_LEFT",54:"ADDRESS",55:"CONTRACT",56:"ISNAT",57:"CAST",58:"RENAME",59:"bool","5a":"contract","5b":"int","5c":"key","5d":"key_hash","5e":"lambda","5f":"list",60:"map",61:"big_map",62:"nat",63:"option",64:"or",65:"pair",66:"set",67:"signature",68:"string",69:"bytes","6a":"mutez","6b":"timestamp","6c":"unit","6d":"operation","6e":"address","6f":"SLICE",70:"DIG",71:"DUG",72:"EMPTY_BIG_MAP",73:"APPLY",74:"chain_id",75:"CHAIN_ID",76:"LEVEL",77:"SELF_ADDRESS",78:"never",79:"NEVER","7a":"UNPAIR","7b":"VOTING_POWER","7c":"TOTAL_VOTING_POWER","7d":"KECCAK","7e":"SHA3","7f":"PAIRING_CHECK",80:"bls12_381_g1",81:"bls12_381_g2",82:"bls12_381_fr",83:"sapling_state",84:"sapling_transaction_deprecated",85:"SAPLING_EMPTY_STATE",86:"SAPLING_VERIFY_UPDATE",87:"ticket",88:"TICKET_DEPRECATED",89:"READ_TICKET","8a":"SPLIT_TICKET","8b":"JOIN_TICKETS","8c":"GET_AND_UPDATE","8d":"chest","8e":"chest_key","8f":"OPEN_CHEST",90:"VIEW",91:"view",92:"constant",93:"SUB_MUTEZ",94:"tx_rollup_l2_address",95:"MIN_BLOCK_TIME",96:"sapling_transaction",97:"EMIT",98:"Lambda_rec",99:"LAMBDA_REC","9a":"TICKET","9b":"BYTES","9c":"NAT"},s=(()=>{const t={};return Object.keys(o).forEach((e=>{t[o[e]]=e})),t})(),a={4:"activate_account",107:"reveal",110:"delegation",108:"transaction",109:"origination",6:"ballot",21:"endorsement",1:"seed_nonce_revelation",5:"proposals",111:"register_global_constant",150:"tx_rollup_origination",151:"tx_rollup_submit_batch",158:"transfer_ticket",112:"set_deposits_limit",113:"increase_paid_storage",114:"update_consensus_key",9:"drain_delegate",200:"smart_rollup_originate",201:"smart_rollup_add_messages",206:"smart_rollup_execute_outbox_message"},f=(()=>{const t={};return Object.keys(a).forEach((r=>{const n="string"==typeof r?parseInt(r,10):r;t[a[n]]=e(n,2)})),t})(),h={"00":"default","01":"root","02":"do","03":"set_delegate","04":"remove_delegate","05":"deposit"},d=(()=>{const t={};return Object.keys(h).forEach((e=>{t[h[e]]=e})),t})();var c=r(8834),u=(r(7728),r(6851),r(1395),r(4075)),l=r.n(u);class b extends Error{}class p extends b{}class g extends p{constructor(t,e){super(),this.address=t,this.name="InvalidAddressError",this.message=`Invalid address "${t}"`,e&&(this.message+=` ${e}.`)}}class m extends p{constructor(t,e){super(),this.blockHash=t,this.name="InvalidBlockHashError",this.message=`Invalid block hash "${t}"`,e&&(this.message+=` ${e}.`)}}class y extends p{constructor(t,e){super(),this.hexString=t,this.name="InvalidHexStringError",this.message=`Invalid hex string "${t}"`,e&&(this.message+=` ${e}.`)}}class _ extends p{constructor(t,e){super(),this.publicKey=t,this.name="InvalidPublicKeyError",this.message=`Invalid public key "${t}"`,e&&(this.message+=` ${e}.`)}}class v extends p{constructor(t,e){super(),this.contractAddress=t,this.name="InvalidContractAddressError",this.message=`Invalid contract address "${t}"`,e&&(this.message+=` ${e}.`)}}class w extends p{constructor(t,e){super(),this.keyHash=t,this.name="InvalidKeyHashError",this.message=`Invalid public key hash "${t}"`,e&&(this.message+=` ${e}.`)}}class A extends p{constructor(t,e){super(),this.operationKind=t,this.name="InvalidOperationKindError",this.message=`Invalid operation kind "${t}"`,e&&(this.message+=` ${e}.`)}}var S=/^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i,E=Math.ceil,M=Math.floor,I="[BigNumber Error] ",R=I+"Number primitive has more than 15 significant digits: ",T=1e14,L=14,P=9007199254740991,O=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],x=1e7,N=1e9;function B(t){var e=0|t;return t>0||t===e?e:e-1}function k(t){for(var e,r,n=1,i=t.length,o=t[0]+"";nh^r?1:-1;for(a=(f=i.length)<(h=o.length)?f:h,s=0;so[s]^r?1:-1;return f==h?0:f>h^r?1:-1}function C(t,e,r,n){if(tr||t!==M(t))throw Error(I+(n||"Argument")+("number"==typeof t?tr?" out of range: ":" not an integer: ":" not a primitive number: ")+String(t))}function D(t){var e=t.c.length-1;return B(t.e/L)==e&&t.c[e]%2!=0}function H(t,e){return(t.length>1?t.charAt(0)+"."+t.slice(1):t)+(e<0?"e":"e+")+e}function z(t,e,r){var n,i;if(e<0){for(i=r+".";++e;i+=r);t=i+t}else if(++e>(n=t.length)){for(i=r,e-=n;--e;i+=r);t+=i}else e_?u.c=u.e=null:t.e=10;f/=10,a++);return void(a>_?u.c=u.e=null:(u.e=a,u.c=[t]))}c=String(t)}else{if(!S.test(c=String(t)))return i(u,c,h);u.s=45==c.charCodeAt(0)?(c=c.slice(1),-1):1}(a=c.indexOf("."))>-1&&(c=c.replace(".","")),(f=c.search(/e/i))>0?(a<0&&(a=f),a+=+c.slice(f+1),c=c.substring(0,f)):a<0&&(a=c.length)}else{if(C(e,2,q.length,"Base"),10==e&&K)return V(u=new F(t),b+u.e+1,p);if(c=String(t),h="number"==typeof t){if(0*t!=0)return i(u,c,h,e);if(u.s=1/t<0?(c=c.slice(1),-1):1,F.DEBUG&&c.replace(/^0\.0*|\./,"").length>15)throw Error(R+t)}else u.s=45===c.charCodeAt(0)?(c=c.slice(1),-1):1;for(r=q.slice(0,e),a=f=0,d=c.length;fa){a=d;continue}}else if(!s&&(c==c.toUpperCase()&&(c=c.toLowerCase())||c==c.toLowerCase()&&(c=c.toUpperCase()))){s=!0,f=-1,a=0;continue}return i(u,String(t),h,e)}h=!1,(a=(c=n(c,e,10,u.s)).indexOf("."))>-1?c=c.replace(".",""):a=c.length}for(f=0;48===c.charCodeAt(f);f++);for(d=c.length;48===c.charCodeAt(--d););if(c=c.slice(f,++d)){if(d-=f,h&&F.DEBUG&&d>15&&(t>P||t!==M(t)))throw Error(R+u.s*t);if((a=a-f-1)>_)u.c=u.e=null;else if(a=m)?H(f,s):z(f,s,"0");else if(o=(t=V(new F(t),e,r)).e,a=(f=k(t.c)).length,1==n||2==n&&(e<=o||o<=g)){for(;aa){if(--e>0)for(f+=".";e--;f+="0");}else if((e+=o-a)>0)for(o+1==a&&(f+=".");e--;f+="0");return t.s<0&&i?"-"+f:f}function G(t,e){for(var r,n=1,i=new F(t[0]);n=10;i/=10,n++);return(r=n+r*L-1)>_?t.c=t.e=null:r=10;a/=10,i++);if((o=e-i)<0)o+=L,s=e,d=(f=c[h=0])/u[i-s-1]%10|0;else if((h=E((o+1)/L))>=c.length){if(!n)break t;for(;c.length<=h;c.push(0));f=d=0,i=1,s=(o%=L)-L+1}else{for(f=a=c[h],i=1;a>=10;a/=10,i++);d=(s=(o%=L)-L+i)<0?0:f/u[i-s-1]%10|0}if(n=n||e<0||null!=c[h+1]||(s<0?f:f%u[i-s-1]),n=r<4?(d||n)&&(0==r||r==(t.s<0?3:2)):d>5||5==d&&(4==r||n||6==r&&(o>0?s>0?f/u[i-s]:0:c[h-1])%10&1||r==(t.s<0?8:7)),e<1||!c[0])return c.length=0,n?(e-=t.e+1,c[0]=u[(L-e%L)%L],t.e=-e||0):c[0]=t.e=0,t;if(0==o?(c.length=h,a=1,h--):(c.length=h+1,a=u[L-o],c[h]=s>0?M(f/u[i-s]%u[s])*a:0),n)for(;;){if(0==h){for(o=1,s=c[0];s>=10;s/=10,o++);for(s=c[0]+=a,a=1;s>=10;s/=10,a++);o!=a&&(t.e++,c[0]==T&&(c[0]=1));break}if(c[h]+=a,c[h]!=T)break;c[h--]=0,a=1}for(o=c.length;0===c[--o];c.pop());}t.e>_?t.c=t.e=null:t.e=m?H(e,r):z(e,r,"0"),t.s<0?"-"+e:e)}return F.clone=t,F.ROUND_UP=0,F.ROUND_DOWN=1,F.ROUND_CEIL=2,F.ROUND_FLOOR=3,F.ROUND_HALF_UP=4,F.ROUND_HALF_DOWN=5,F.ROUND_HALF_EVEN=6,F.ROUND_HALF_CEIL=7,F.ROUND_HALF_FLOOR=8,F.EUCLID=9,F.config=F.set=function(t){var e,r;if(null!=t){if("object"!=typeof t)throw Error(I+"Object expected: "+t);if(t.hasOwnProperty(e="DECIMAL_PLACES")&&(C(r=t[e],0,N,e),b=r),t.hasOwnProperty(e="ROUNDING_MODE")&&(C(r=t[e],0,8,e),p=r),t.hasOwnProperty(e="EXPONENTIAL_AT")&&((r=t[e])&&r.pop?(C(r[0],-N,0,e),C(r[1],0,N,e),g=r[0],m=r[1]):(C(r,-N,N,e),g=-(m=r<0?-r:r))),t.hasOwnProperty(e="RANGE"))if((r=t[e])&&r.pop)C(r[0],-N,-1,e),C(r[1],1,N,e),y=r[0],_=r[1];else{if(C(r,-N,N,e),!r)throw Error(I+e+" cannot be zero: "+r);y=-(_=r<0?-r:r)}if(t.hasOwnProperty(e="CRYPTO")){if((r=t[e])!==!!r)throw Error(I+e+" not true or false: "+r);if(r){if("undefined"==typeof crypto||!crypto||!crypto.getRandomValues&&!crypto.randomBytes)throw v=!r,Error(I+"crypto unavailable");v=r}else v=r}if(t.hasOwnProperty(e="MODULO_MODE")&&(C(r=t[e],0,9,e),w=r),t.hasOwnProperty(e="POW_PRECISION")&&(C(r=t[e],0,N,e),A=r),t.hasOwnProperty(e="FORMAT")){if("object"!=typeof(r=t[e]))throw Error(I+e+" not an object: "+r);j=r}if(t.hasOwnProperty(e="ALPHABET")){if("string"!=typeof(r=t[e])||/^.?$|[+\-.\s]|(.).*\1/.test(r))throw Error(I+e+" invalid: "+r);K="0123456789"==r.slice(0,10),q=r}}return{DECIMAL_PLACES:b,ROUNDING_MODE:p,EXPONENTIAL_AT:[g,m],RANGE:[y,_],CRYPTO:v,MODULO_MODE:w,POW_PRECISION:A,FORMAT:j,ALPHABET:q}},F.isBigNumber=function(t){if(!t||!0!==t._isBigNumber)return!1;if(!F.DEBUG)return!0;var e,r,n=t.c,i=t.e,o=t.s;t:if("[object Array]"=={}.toString.call(n)){if((1===o||-1===o)&&i>=-N&&i<=N&&i===M(i)){if(0===n[0]){if(0===i&&1===n.length)return!0;break t}if((e=(i+1)%L)<1&&(e+=L),String(n[0]).length==e){for(e=0;e=T||r!==M(r))break t;if(0!==r)return!0}}}else if(null===n&&null===i&&(null===o||1===o||-1===o))return!0;throw Error(I+"Invalid BigNumber: "+t)},F.maximum=F.max=function(){return G(arguments,u.lt)},F.minimum=F.min=function(){return G(arguments,u.gt)},F.random=(o=9007199254740992,s=Math.random()*o&2097151?function(){return M(Math.random()*o)}:function(){return 8388608*(1073741824*Math.random()|0)+(8388608*Math.random()|0)},function(t){var e,r,n,i,o,a=0,f=[],h=new F(l);if(null==t?t=b:C(t,0,N),i=E(t/L),v)if(crypto.getRandomValues){for(e=crypto.getRandomValues(new Uint32Array(i*=2));a>>11))>=9e15?(r=crypto.getRandomValues(new Uint32Array(2)),e[a]=r[0],e[a+1]=r[1]):(f.push(o%1e14),a+=2);a=i/2}else{if(!crypto.randomBytes)throw v=!1,Error(I+"crypto unavailable");for(e=crypto.randomBytes(i*=7);a=9e15?crypto.randomBytes(7).copy(e,a):(f.push(o%1e14),a+=7);a=i/7}if(!v)for(;a=10;o/=10,a++);ar-1&&(null==s[i+1]&&(s[i+1]=0),s[i+1]+=s[i]/r|0,s[i]%=r)}return s.reverse()}return function(n,i,o,s,a){var f,h,d,c,u,l,g,m,y=n.indexOf("."),_=b,v=p;for(y>=0&&(c=A,A=0,n=n.replace(".",""),l=(m=new F(i)).pow(n.length-y),A=c,m.c=e(z(k(l.c),l.e,"0"),10,o,t),m.e=m.c.length),d=c=(g=e(n,i,o,a?(f=q,t):(f=t,q))).length;0==g[--c];g.pop());if(!g[0])return f.charAt(0);if(y<0?--d:(l.c=g,l.e=d,l.s=s,g=(l=r(l,m,_,v,o)).c,u=l.r,d=l.e),y=g[h=d+_+1],c=o/2,u=u||h<0||null!=g[h+1],u=v<4?(null!=y||u)&&(0==v||v==(l.s<0?3:2)):y>c||y==c&&(4==v||u||6==v&&1&g[h-1]||v==(l.s<0?8:7)),h<1||!g[0])n=u?z(f.charAt(1),-_,f.charAt(0)):f.charAt(0);else{if(g.length=h,u)for(--o;++g[--h]>o;)g[h]=0,h||(++d,g=[1].concat(g));for(c=g.length;!g[--c];);for(y=0,n="";y<=c;n+=f.charAt(g[y++]));n=z(n,d,f.charAt(0))}return n}}(),r=function(){function t(t,e,r){var n,i,o,s,a=0,f=t.length,h=e%x,d=e/x|0;for(t=t.slice();f--;)a=((i=h*(o=t[f]%x)+(n=d*o+(s=t[f]/x|0)*h)%x*x+a)/r|0)+(n/x|0)+d*s,t[f]=i%r;return a&&(t=[a].concat(t)),t}function e(t,e,r,n){var i,o;if(r!=n)o=r>n?1:-1;else for(i=o=0;ie[i]?1:-1;break}return o}function r(t,e,r,n){for(var i=0;r--;)t[r]-=i,i=t[r]1;t.splice(0,1));}return function(n,i,o,s,a){var f,h,d,c,u,l,b,p,g,m,y,_,v,w,A,S,E,I=n.s==i.s?1:-1,R=n.c,P=i.c;if(!(R&&R[0]&&P&&P[0]))return new F(n.s&&i.s&&(R?!P||R[0]!=P[0]:P)?R&&0==R[0]||!P?0*I:I/0:NaN);for(g=(p=new F(I)).c=[],I=o+(h=n.e-i.e)+1,a||(a=T,h=B(n.e/L)-B(i.e/L),I=I/L|0),d=0;P[d]==(R[d]||0);d++);if(P[d]>(R[d]||0)&&h--,I<0)g.push(1),c=!0;else{for(w=R.length,S=P.length,d=0,I+=2,(u=M(a/(P[0]+1)))>1&&(P=t(P,u,a),R=t(R,u,a),S=P.length,w=R.length),v=S,y=(m=R.slice(0,S)).length;y=a/2&&A++;do{if(u=0,(f=e(P,m,S,y))<0){if(_=m[0],S!=y&&(_=_*a+(m[1]||0)),(u=M(_/A))>1)for(u>=a&&(u=a-1),b=(l=t(P,u,a)).length,y=m.length;1==e(l,m,b,y);)u--,r(l,S=10;I/=10,d++);V(p,o+(p.e=d+h*L-1)+1,s,c)}else p.e=h,p.r=+c;return p}}(),a=/^(-?)0([xbo])(?=\w[\w.]*$)/i,f=/^([^.]+)\.$/,h=/^\.([^.]+)$/,d=/^-?(Infinity|NaN)$/,c=/^\s*\+(?=[\w.])|^\s+|\s+$/g,i=function(t,e,r,n){var i,o=r?e:e.replace(c,"");if(d.test(o))t.s=isNaN(o)?null:o<0?-1:1;else{if(!r&&(o=o.replace(a,(function(t,e,r){return i="x"==(r=r.toLowerCase())?16:"b"==r?2:8,n&&n!=i?t:e})),n&&(i=n,o=o.replace(f,"$1").replace(h,"0.$1")),e!=o))return new F(o,i);if(F.DEBUG)throw Error(I+"Not a"+(n?" base "+n:"")+" number: "+e);t.s=null}t.c=t.e=null},u.absoluteValue=u.abs=function(){var t=new F(this);return t.s<0&&(t.s=1),t},u.comparedTo=function(t,e){return U(this,new F(t,e))},u.decimalPlaces=u.dp=function(t,e){var r,n,i,o=this;if(null!=t)return C(t,0,N),null==e?e=p:C(e,0,8),V(new F(o),t+o.e+1,e);if(!(r=o.c))return null;if(n=((i=r.length-1)-B(this.e/L))*L,i=r[i])for(;i%10==0;i/=10,n--);return n<0&&(n=0),n},u.dividedBy=u.div=function(t,e){return r(this,new F(t,e),b,p)},u.dividedToIntegerBy=u.idiv=function(t,e){return r(this,new F(t,e),0,1)},u.exponentiatedBy=u.pow=function(t,e){var r,n,i,o,s,a,f,h,d=this;if((t=new F(t)).c&&!t.isInteger())throw Error(I+"Exponent not an integer: "+X(t));if(null!=e&&(e=new F(e)),s=t.e>14,!d.c||!d.c[0]||1==d.c[0]&&!d.e&&1==d.c.length||!t.c||!t.c[0])return h=new F(Math.pow(+X(d),s?t.s*(2-D(t)):+X(t))),e?h.mod(e):h;if(a=t.s<0,e){if(e.c?!e.c[0]:!e.s)return new F(NaN);(n=!a&&d.isInteger()&&e.isInteger())&&(d=d.mod(e))}else{if(t.e>9&&(d.e>0||d.e<-1||(0==d.e?d.c[0]>1||s&&d.c[1]>=24e7:d.c[0]<8e13||s&&d.c[0]<=9999975e7)))return o=d.s<0&&D(t)?-0:0,d.e>-1&&(o=1/o),new F(a?1/o:o);A&&(o=E(A/L+2))}for(s?(r=new F(.5),a&&(t.s=1),f=D(t)):f=(i=Math.abs(+X(t)))%2,h=new F(l);;){if(f){if(!(h=h.times(d)).c)break;o?h.c.length>o&&(h.c.length=o):n&&(h=h.mod(e))}if(i){if(0===(i=M(i/2)))break;f=i%2}else if(V(t=t.times(r),t.e+1,1),t.e>14)f=D(t);else{if(0==(i=+X(t)))break;f=i%2}d=d.times(d),o?d.c&&d.c.length>o&&(d.c.length=o):n&&(d=d.mod(e))}return n?h:(a&&(h=l.div(h)),e?h.mod(e):o?V(h,A,p,void 0):h)},u.integerValue=function(t){var e=new F(this);return null==t?t=p:C(t,0,8),V(e,e.e+1,t)},u.isEqualTo=u.eq=function(t,e){return 0===U(this,new F(t,e))},u.isFinite=function(){return!!this.c},u.isGreaterThan=u.gt=function(t,e){return U(this,new F(t,e))>0},u.isGreaterThanOrEqualTo=u.gte=function(t,e){return 1===(e=U(this,new F(t,e)))||0===e},u.isInteger=function(){return!!this.c&&B(this.e/L)>this.c.length-2},u.isLessThan=u.lt=function(t,e){return U(this,new F(t,e))<0},u.isLessThanOrEqualTo=u.lte=function(t,e){return-1===(e=U(this,new F(t,e)))||0===e},u.isNaN=function(){return!this.s},u.isNegative=function(){return this.s<0},u.isPositive=function(){return this.s>0},u.isZero=function(){return!!this.c&&0==this.c[0]},u.minus=function(t,e){var r,n,i,o,s=this,a=s.s;if(e=(t=new F(t,e)).s,!a||!e)return new F(NaN);if(a!=e)return t.s=-e,s.plus(t);var f=s.e/L,h=t.e/L,d=s.c,c=t.c;if(!f||!h){if(!d||!c)return d?(t.s=-e,t):new F(c?s:NaN);if(!d[0]||!c[0])return c[0]?(t.s=-e,t):new F(d[0]?s:3==p?-0:0)}if(f=B(f),h=B(h),d=d.slice(),a=f-h){for((o=a<0)?(a=-a,i=d):(h=f,i=c),i.reverse(),e=a;e--;i.push(0));i.reverse()}else for(n=(o=(a=d.length)<(e=c.length))?a:e,a=e=0;e0)for(;e--;d[r++]=0);for(e=T-1;n>a;){if(d[--n]=0;){for(r=0,u=_[i]%g,l=_[i]/g|0,o=i+(s=f);o>i;)r=((h=u*(h=y[--s]%g)+(a=l*h+(d=y[s]/g|0)*u)%g*g+b[o]+r)/p|0)+(a/g|0)+l*d,b[o--]=h%p;b[o]=r}return r?++n:b.splice(0,1),$(t,b,n)},u.negated=function(){var t=new F(this);return t.s=-t.s||null,t},u.plus=function(t,e){var r,n=this,i=n.s;if(e=(t=new F(t,e)).s,!i||!e)return new F(NaN);if(i!=e)return t.s=-e,n.minus(t);var o=n.e/L,s=t.e/L,a=n.c,f=t.c;if(!o||!s){if(!a||!f)return new F(i/0);if(!a[0]||!f[0])return f[0]?t:new F(a[0]?n:0*i)}if(o=B(o),s=B(s),a=a.slice(),i=o-s){for(i>0?(s=o,r=f):(i=-i,r=a),r.reverse();i--;r.push(0));r.reverse()}for((i=a.length)-(e=f.length)<0&&(r=f,f=a,a=r,e=i),i=0;e;)i=(a[--e]=a[e]+f[e]+i)/T|0,a[e]=T===a[e]?0:a[e]%T;return i&&(a=[i].concat(a),++s),$(t,a,s)},u.precision=u.sd=function(t,e){var r,n,i,o=this;if(null!=t&&t!==!!t)return C(t,1,N),null==e?e=p:C(e,0,8),V(new F(o),t,e);if(!(r=o.c))return null;if(n=(i=r.length-1)*L+1,i=r[i]){for(;i%10==0;i/=10,n--);for(i=r[0];i>=10;i/=10,n++);}return t&&o.e+1>n&&(n=o.e+1),n},u.shiftedBy=function(t){return C(t,-9007199254740991,P),this.times("1e"+t)},u.squareRoot=u.sqrt=function(){var t,e,n,i,o,s=this,a=s.c,f=s.s,h=s.e,d=b+4,c=new F("0.5");if(1!==f||!a||!a[0])return new F(!f||f<0&&(!a||a[0])?NaN:a?s:1/0);if(0==(f=Math.sqrt(+X(s)))||f==1/0?(((e=k(a)).length+h)%2==0&&(e+="0"),f=Math.sqrt(+e),h=B((h+1)/2)-(h<0||h%2),n=new F(e=f==1/0?"5e"+h:(e=f.toExponential()).slice(0,e.indexOf("e")+1)+h)):n=new F(f+""),n.c[0])for((f=(h=n.e)+d)<3&&(f=0);;)if(o=n,n=c.times(o.plus(r(s,o,d,1))),k(o.c).slice(0,f)===(e=k(n.c)).slice(0,f)){if(n.e0&&b>0){for(o=b%a||a,d=l.substr(0,o);o0&&(d+=h+l.slice(o)),u&&(d="-"+d)}n=c?d+(r.decimalSeparator||"")+((f=+r.fractionGroupSize)?c.replace(new RegExp("\\d{"+f+"}\\B","g"),"$&"+(r.fractionGroupSeparator||"")):c):d}return(r.prefix||"")+n+(r.suffix||"")},u.toFraction=function(t){var e,n,i,o,s,a,f,h,d,c,u,b,g=this,m=g.c;if(null!=t&&(!(f=new F(t)).isInteger()&&(f.c||1!==f.s)||f.lt(l)))throw Error(I+"Argument "+(f.isInteger()?"out of range: ":"not an integer: ")+X(f));if(!m)return new F(g);for(e=new F(l),d=n=new F(l),i=h=new F(l),b=k(m),s=e.e=b.length-g.e-1,e.c[0]=O[(a=s%L)<0?L+a:a],t=!t||f.comparedTo(e)>0?s>0?e:d:f,a=_,_=1/0,f=new F(b),h.c[0]=0;c=r(f,e,0,1),1!=(o=n.plus(c.times(i))).comparedTo(t);)n=i,i=o,d=h.plus(c.times(o=d)),h=o,e=f.minus(c.times(o=e)),f=o;return o=r(t.minus(n),i,0,1),h=h.plus(o.times(d)),n=n.plus(o.times(i)),h.s=d.s=g.s,u=r(d,i,s*=2,p).minus(g).abs().comparedTo(r(h,n,s,p).minus(g).abs())<1?[d,i]:[h,n],_=a,u},u.toNumber=function(){return+X(this)},u.toPrecision=function(t,e){return null!=t&&C(t,1,N),Z(this,t,e,2)},u.toString=function(t){var e,r=this,i=r.s,o=r.e;return null===o?i?(e="Infinity",i<0&&(e="-"+e)):e="NaN":(null==t?e=o<=g||o>=m?H(k(r.c),o):z(k(r.c),o,"0"):10===t&&K?e=z(k((r=V(new F(r),b+o+1,p)).c),r.e,"0"):(C(t,2,q.length,"Base"),e=n(z(k(r.c),o,"0"),10,t,i,!0)),i<0&&r.c[0]&&(e="-"+e)),e},u.valueOf=u.toJSON=function(){return X(this)},u._isBigNumber=!0,u[Symbol.toStringTag]="BigNumber",u[Symbol.for("nodejs.util.inspect.custom")]=u.valueOf,null!=e&&F.set(e),F}();const q=j;var K;r(7554),r(8743),function(t){t.TZ1="tz1",t.TZ2="tz2",t.TZ3="tz3",t.TZ4="tz4",t.KT="KT",t.KT1="KT1",t.EDSK2="edsk2",t.SPSK="spsk",t.P2SK="p2sk",t.EDPK="edpk",t.SPPK="sppk",t.P2PK="p2pk",t.BLPK="BLpk",t.EDESK="edesk",t.SPESK="spesk",t.P2ESK="p2esk",t.EDSK="edsk",t.EDSIG="edsig",t.SPSIG="spsig",t.P2SIG="p2sig",t.SIG="sig",t.NET="Net",t.NCE="nce",t.B="B",t.O="o",t.LO="Lo",t.LLO="LLo",t.P="P",t.CO="Co",t.ID="id",t.EXPR="expr",t.TZ="TZ",t.VH="vh",t.SASK="sask",t.ZET1="zet1",t.TXR1="txr1",t.TXI="txi",t.TXM="txm",t.TXC="txc",t.TXMR="txmr",t.TXRL="txM",t.TXW="txw",t.SR1="sr1",t.SRC1="src1"}(K||(K={}));const F={[K.TZ1]:new Uint8Array([6,161,159]),[K.TZ2]:new Uint8Array([6,161,161]),[K.TZ3]:new Uint8Array([6,161,164]),[K.TZ4]:new Uint8Array([6,161,166]),[K.KT]:new Uint8Array([2,90,121]),[K.KT1]:new Uint8Array([2,90,121]),[K.EDSK]:new Uint8Array([43,246,78,7]),[K.EDSK2]:new Uint8Array([13,15,58,7]),[K.SPSK]:new Uint8Array([17,162,224,201]),[K.P2SK]:new Uint8Array([16,81,238,189]),[K.EDPK]:new Uint8Array([13,15,37,217]),[K.SPPK]:new Uint8Array([3,254,226,86]),[K.P2PK]:new Uint8Array([3,178,139,127]),[K.BLPK]:new Uint8Array([6,149,135,204]),[K.EDESK]:new Uint8Array([7,90,60,179,41]),[K.SPESK]:new Uint8Array([9,237,241,174,150]),[K.P2ESK]:new Uint8Array([9,48,57,115,171]),[K.EDSIG]:new Uint8Array([9,245,205,134,18]),[K.SPSIG]:new Uint8Array([13,115,101,19,63]),[K.P2SIG]:new Uint8Array([54,240,44,52]),[K.SIG]:new Uint8Array([4,130,43]),[K.NET]:new Uint8Array([87,82,0]),[K.NCE]:new Uint8Array([69,220,169]),[K.B]:new Uint8Array([1,52]),[K.O]:new Uint8Array([5,116]),[K.LO]:new Uint8Array([133,233]),[K.LLO]:new Uint8Array([29,159,109]),[K.P]:new Uint8Array([2,170]),[K.CO]:new Uint8Array([79,179]),[K.ID]:new Uint8Array([153,103]),[K.EXPR]:new Uint8Array([13,44,64,27]),[K.TZ]:new Uint8Array([2,90,121]),[K.VH]:new Uint8Array([1,106,242]),[K.SASK]:new Uint8Array([11,237,20,92]),[K.ZET1]:new Uint8Array([18,71,40,223]),[K.TXR1]:new Uint8Array([1,128,120,31]),[K.TXI]:new Uint8Array([79,148,196]),[K.TXM]:new Uint8Array([79,149,30]),[K.TXC]:new Uint8Array([79,148,17]),[K.TXMR]:new Uint8Array([18,7,206,87]),[K.TXRL]:new Uint8Array([79,146,82]),[K.TXW]:new Uint8Array([79,150,72]),[K.SR1]:new Uint8Array([6,124,117]),[K.SRC1]:new Uint8Array([17,165,134,138])},Z={[K.TZ1]:20,[K.TZ2]:20,[K.TZ3]:20,[K.TZ4]:20,[K.KT]:20,[K.KT1]:20,[K.EDPK]:32,[K.SPPK]:33,[K.P2PK]:33,[K.BLPK]:48,[K.EDSIG]:64,[K.SPSIG]:64,[K.P2SIG]:64,[K.SIG]:64,[K.NET]:4,[K.B]:32,[K.P]:32,[K.O]:32,[K.VH]:32,[K.SASK]:169,[K.ZET1]:43,[K.TXR1]:20,[K.TXI]:32,[K.TXM]:32,[K.TXC]:32,[K.TXMR]:32,[K.TXRL]:32,[K.TXW]:32,[K.SR1]:20,[K.SRC1]:32};var G;!function(t){t[t.NO_PREFIX_MATCHED=0]="NO_PREFIX_MATCHED",t[t.INVALID_CHECKSUM=1]="INVALID_CHECKSUM",t[t.INVALID_LENGTH=2]="INVALID_LENGTH",t[t.VALID=3]="VALID"}(G||(G={})),K.TZ1,K.TZ2,K.TZ3,K.TZ4,K.KT1,K.TXR1,K.EDSIG,K.P2SIG,K.SPSIG,K.SIG,K.EDPK,K.SPPK,K.P2PK,K.BLPK,K.O,K.P;const $=[K.B];function V(t){switch(t){case G.NO_PREFIX_MATCHED:return"with unsupported prefix";case G.INVALID_CHECKSUM:return"failed checksum";case G.INVALID_LENGTH:return"with incorrect length";default:return""}}K.SR1;class X extends p{constructor(t,e){super(),this.operation=t,this.name="InvalidOperationSchemaError",this.message="Invalid operation content recevied",e&&(this.message+=` ${e}.`)}}class W extends p{constructor(t){super(),this.entrypoint=t,this.name="OversizedEntryPointError",this.message=`Invalid entrypoint length "${t.length}", maximum length is "31".`}}class Y extends p{constructor(t){super(),this.ballotValue=t,this.name="InvalidBallotValueError",this.message=`Invalid ballot value "${t}" expecting one of the following: "yay", "nay", "pass".`}}class J extends p{constructor(t){super(),this.ballotValue=t,this.name="DecodeBallotValueError",this.message=`Invalid ballot value "${t}", cannot be decoded.`}}class Q extends p{constructor(t){super(),this.value=t,this.name="UnexpectedMichelsonValueError",this.message=`Invalid Michelson value "${t}", unalbe to encode.`}}class tt extends p{constructor(t){super(),this.message=t,this.name="OperationDecodingError"}}class et extends p{constructor(t){super(),this.message=t,this.name="OperationEncodingError"}}class rt extends p{constructor(t){super(),this.op=t,this.name="UnsupportedOperationError",this.message=`Unsupported operation "${t}", can submit an issue on our github for feature request.`}}class nt extends p{constructor(t){super(),this.pvm=t,this.name="UnsupportedPvmKindError",this.message=`Invalid Pvm kind "${t}" expecting either "arith" or "wasm_2_0_0".`}}class it extends p{constructor(t){super(),this.pvm=t,this.name="DecodePvmKindError",this.message=`Invalid Pvm kind "${t}", cannot be decoded.`}}class ot extends p{constructor(t,e){super(),this.address=t,this.name="InvalidSmartRollupAddress",this.message=`Invalid smart rollup address "${t}"`,e&&(this.message+=` ${e}.`)}}class st extends p{constructor(t,e){super(),this.hash=t,this.name="InvalidSmartRollupCommitmentHashError",this.message=`Invalid smart rollup commitment hash "${t}"`,e&&(this.message+=` ${e}.`)}}class at{constructor(t,e=0){this.arr=t,this.offset=e}static fromHexString(t){const e=t.toLowerCase();if(/^(([a-f]|\d){2})*$/.test(e)){const t=new Uint8Array((e.match(/([a-z]|\d){2}/g)||[]).map((t=>parseInt(t,16))));return new at(t)}throw new y(e)}consume(t){const e=this.arr.subarray(this.offset,this.offset+t);return this.offset+=t,e}get(t){return this.arr[this.offset+t]}length(){return this.arr.length-this.offset}slice(t,e){return new at(this.arr.slice(t,e))}}var ft=r(8834).Buffer;const ht=t=>{if(Array.isArray(t)){const r=t.map((t=>ht(t))).join(""),n=r.length/2;return`02${e(n)}${r}`}if((t=>"prim"in t)(t))return yt(t);if((t=>"bytes"in t&&"string"==typeof t.bytes)(t))return ut(t);if((t=>"string"in t&&"string"==typeof t.string)(t))return bt(t);if((t=>"int"in t&&"string"==typeof t.int)(t))return gt(t);throw new Q(JSON.stringify(t))},dt=t=>{const e=t.consume(1);switch(e[0]){case 10:return lt(t);case 1:return pt(t);case 0:return mt(t);case 2:{const e=new at(ct(t)),r=[];for(;e.length()>0;)r.push(dt(e));return r}default:return _t(t,e)}},ct=(t,e=4)=>{const r=t.consume(e),n=parseInt(ft.from(r).toString("hex"),16);return t.consume(n)},ut=t=>{if(!/^([A-Fa-f0-9]{2})*$/.test(t.bytes))throw new y(t.bytes);const r=t.bytes.length/2;return`0a${e(r)}${t.bytes}`},lt=t=>{const e=ct(t);return{bytes:ft.from(e).toString("hex")}},bt=t=>{const r=ft.from(t.string,"utf8").toString("hex"),n=r.length/2;return`01${e(n)}${r}`},pt=t=>{const e=ct(t);return{string:ft.from(e).toString("utf8")}},gt=({int:t})=>{const e=new j(t,10),r="-"===e.toString(2)[0]?"1":"0",n=e.toString(2).replace(/-/g,""),i=n.length<=6?6:(n.length-6)%7?n.length+7-(n.length-6)%7:n.length,o=n.padStart(i,"0").match(/\d{6,7}/g).reverse();return o[0]=r+o[0],`00${o.map(((t,e)=>parseInt((e===o.length-1?"0":"1")+t,2).toString(16).padStart(2,"0"))).join("")}`},mt=t=>{let e=t.consume(1)[0];const r=[];for(;128&e;)r.push(e),e=t.consume(1)[0];r.push(e);const n=!!(64&r[0]);r[0]=127&r[0];const i=r.map(((t,e)=>t.toString(2).slice(0===e?-6:-7).padStart(0===e?6:7,"0"))).reverse();let o=new j(i.join(""),2);return n&&(o=o.times(-1)),{int:o.toFixed()}},yt=t=>{const r=+Array.isArray(t.annots),n=Array.isArray(t.args)?t.args.length:0,i=e(Math.min(2*n+r+3,9),2),o=s[t.prim];let a=(t.args||[]).map((t=>ht(t))).join("");const f=Array.isArray(t.annots)?At(t.annots):"";return"LAMBDA"!==t.prim&&"LAMBDA_REC"!==t.prim||!n||(a=e(a.length/2)+a+e(0)),("pair"===t.prim||"Pair"===t.prim)&&n>2&&(a=""===f?e(a.length/2)+a+e(0):e(a.length/2)+a),"view"===t.prim&&t.args&&(a=e(a.length/2)+a+e(0)),`${i}${o}${a}${f}`},_t=(t,e)=>{const r=(e[0]-3)%2==1;let n=Math.floor((e[0]-3)/2);const i=t.consume(1)[0].toString(16).padStart(2,"0"),s={prim:o[i]};if("LAMBDA"!==o[i]&&"LAMBDA_REC"!==o[i]||t.consume(4),"view"===o[i])return 0!=n?vt(t,s):s;let a,f;("pair"===o[i]||"Pair"===o[i])&&n>2&&(a=wt(t),n=0,f=St(t));const h=new Array(n).fill(0).map((()=>dt(t)));return"LAMBDA"!==o[i]&&"LAMBDA_REC"!==o[i]||t.consume(4),a?s.args=a:h.length&&(s.args=h),f&&""!==f[0]?s.annots=f:r&&(s.annots=St(t)),s},vt=(t,e)=>(t.consume(4),e.args=new Array(4).fill(0).map((()=>dt(t))),t.consume(4),e),wt=t=>{const e=new at(ct(t)),r=[];for(;e.length()>0;)r.push(dt(e));return r},At=t=>{const r=t.map((t=>ft.from(t,"utf8").toString("hex"))).join("20"),n=r.length/2;return`${e(n)}${r}`},St=t=>{const e=t.consume(4),r=parseInt(ft.from(e).toString("hex"),16),n=t.consume(r);return ft.from(n).toString("hex").split("20").map((t=>ft.from(t,"hex").toString("utf8")))};var Et=r(8834).Buffer;const Mt=t=>e=>{return(t=>{const e=new Uint8Array(t),r=[];return e.forEach((t=>{const e=`00${t.toString(16)}`.slice(-2);r.push(e)})),r.join("")})(Et.from((r=e,n=F[t],l().decode(r).slice(n.length))));var r,n},It=t=>e=>function(t,e){const r="string"==typeof t?Uint8Array.from(c.Buffer.from(t,"hex")):t,n=new Uint8Array(e.length+r.length);return n.set(e),n.set(r,e.length),l().encode(c.Buffer.from(n.buffer))}(e.consume(Z[t]),F[t]),Rt=It(K.TZ1),Tt=It(K.B),Lt=t=>{const e=t.consume(1);return 0===e[0]?It(K.TZ1)(t):1===e[0]?It(K.TZ2)(t):2===e[0]?It(K.TZ3)(t):void 0},Pt=Mt(K.B),Ot=Mt(K.TZ1),xt=t=>t?"ff":"00",Nt=t=>Mt(K.P)(t),Bt=t=>It(K.P)(t),kt=t=>{switch(t.substring(0,3)){case K.TZ1:return"00"+Mt(K.TZ1)(t);case K.TZ2:return"01"+Mt(K.TZ2)(t);case K.TZ3:return"02"+Mt(K.TZ3)(t);case K.TZ4:return"03"+Mt(K.TZ4)(t);default:throw new w(t,V(G.NO_PREFIX_MATCHED)+` expecting one for the following "${K.TZ1}", "${K.TZ2}", "${K.TZ3}" or "${K.TZ4}".`)}},Ut=t=>{const e=[];let r=new q(t,10);if(r.isNaN())throw new TypeError(`Invalid zarith number ${t}`);for(;;){if(r.lt(128)){r.lt(16)&&e.push("0"),e.push(r.toString(16));break}{let t=r.mod(128);r=r.minus(t),r=r.dividedBy(128),t=t.plus(128),e.push(t.toString(16))}}return e.join("")},Ct=t=>{let e=0;for(;e=0;n-=1){const e=127&t.get(n);r=r.multipliedBy(128),r=r.plus(e)}return t.consume(e+1),new q(r).toString()},Dt=Mt(K.VH),Ht=It(K.VH),zt=Mt(K.TXR1),jt=It(K.TXR1),qt={branch:i.BRANCH,contents:[i.OPERATION]},Kt={pkh:i.TZ1,secret:i.SECRET},Ft={source:i.PKH,fee:i.ZARITH,counter:i.ZARITH,gas_limit:i.ZARITH,storage_limit:i.ZARITH,public_key:i.PUBLIC_KEY},Zt={source:i.PKH,fee:i.ZARITH,counter:i.ZARITH,gas_limit:i.ZARITH,storage_limit:i.ZARITH,delegate:i.DELEGATE},Gt={source:i.PKH,fee:i.ZARITH,counter:i.ZARITH,gas_limit:i.ZARITH,storage_limit:i.ZARITH,amount:i.ZARITH,destination:i.ADDRESS,parameters:i.PARAMETERS},$t={source:i.PKH,fee:i.ZARITH,counter:i.ZARITH,gas_limit:i.ZARITH,storage_limit:i.ZARITH,balance:i.ZARITH,delegate:i.DELEGATE,script:i.SCRIPT},Vt={source:i.PKH,period:i.INT32,proposal:i.PROPOSAL,ballot:i.BALLOT_STATEMENT},Xt={slot:i.INT16,level:i.INT32,round:i.INT32,block_payload_hash:i.BLOCK_PAYLOAD_HASH},Wt={level:i.INT32,nonce:i.RAW},Yt={source:i.PKH,period:i.INT32,proposals:i.PROPOSAL_ARR},Jt={source:i.PKH,fee:i.ZARITH,counter:i.ZARITH,gas_limit:i.ZARITH,storage_limit:i.ZARITH,value:i.VALUE},Qt={source:i.PKH,fee:i.ZARITH,counter:i.ZARITH,gas_limit:i.ZARITH,storage_limit:i.ZARITH,ticket_contents:i.VALUE,ticket_ty:i.VALUE,ticket_ticketer:i.ADDRESS,ticket_amount:i.ZARITH,destination:i.ADDRESS,entrypoint:i.ENTRYPOINT},te={source:i.PKH,fee:i.ZARITH,counter:i.ZARITH,gas_limit:i.ZARITH,storage_limit:i.ZARITH,tx_rollup_origination:i.TX_ROLLUP_ORIGINATION_PARAM},ee={source:i.PKH,fee:i.ZARITH,counter:i.ZARITH,gas_limit:i.ZARITH,storage_limit:i.ZARITH,rollup:i.TX_ROLLUP_ID,content:i.TX_ROLLUP_BATCH_CONTENT,burn_limit:i.BURN_LIMIT},re={source:i.PKH,fee:i.ZARITH,counter:i.ZARITH,gas_limit:i.ZARITH,storage_limit:i.ZARITH,amount:i.ZARITH,destination:i.SMART_CONTRACT_ADDRESS},ne={source:i.PKH,fee:i.ZARITH,counter:i.ZARITH,gas_limit:i.ZARITH,storage_limit:i.ZARITH,pk:i.PUBLIC_KEY},ie={consensus_key:i.PKH,delegate:i.PKH,destination:i.PKH},oe={source:i.PKH,fee:i.ZARITH,counter:i.ZARITH,gas_limit:i.ZARITH,storage_limit:i.ZARITH,limit:i.DEPOSITS_LIMIT},se={source:i.PKH,fee:i.ZARITH,counter:i.ZARITH,gas_limit:i.ZARITH,storage_limit:i.ZARITH,pvm_kind:i.PVM_KIND,kernel:i.PADDED_BYTES,origination_proof:i.PADDED_BYTES,parameters_ty:i.VALUE},ae={source:i.PKH,fee:i.ZARITH,counter:i.ZARITH,gas_limit:i.ZARITH,storage_limit:i.ZARITH,message:i.SMART_ROLLUP_MESSAGE},fe={source:i.PKH,fee:i.ZARITH,counter:i.ZARITH,gas_limit:i.ZARITH,storage_limit:i.ZARITH,rollup:i.SMART_ROLLUP_ADDRESS,cemented_commitment:i.SMART_ROLLUP_COMMITMENT_HASH,output_proof:i.PADDED_BYTES},he=t=>e=>r=>Object.keys(e).reduce(((n,i)=>{const o=e[i];if(r&&Array.isArray(o)){const e=t[o[0]],s=r[i];if(!Array.isArray(s))throw new et(`Invalid operation value "${JSON.stringify(s)}" of key "${i}, expected value to be Array.`);return n+s.reduce(((t,r)=>t+e(r)),"")}return n+(0,t[o])(r[i])}),""),de=t=>e=>r=>Object.keys(e).reduce(((n,i)=>{const o=e[i];if(Array.isArray(o)){const e=t[o[0]],s=[],a=r.length();for(;r.length()>0;)if(s.push(e(r)),a===r.length())throw new tt("Unable to decode value");return Object.assign(Object.assign({},n),{[i]:s})}{const e=(0,t[o])(r);return void 0!==e?Object.assign(Object.assign({},n),{[i]:e}):Object.assign({},n)}}),{}),ce={[i.SECRET]:e=>t(e.consume(20)),[i.RAW]:e=>t(e.consume(32)),[i.TZ1]:Rt,[i.BRANCH]:Tt,[i.ZARITH]:Ct,[i.PUBLIC_KEY]:t=>{switch(t.consume(1)[0]){case 0:return It(K.EDPK)(t);case 1:return It(K.SPPK)(t);case 2:return It(K.P2PK)(t);default:throw new _(t.toString(),V(G.NO_PREFIX_MATCHED))}},[i.PKH]:Lt,[i.DELEGATE]:t=>{const e=(t=>255===t.consume(1)[0])(t);if(e)return Lt(t)},[i.INT32]:t=>{const e=t.consume(4);let r=0;for(let t=0;t{const e=ct(t),r=ct(t);return{code:dt(new at(e)),storage:dt(new at(r))}},[i.BALLOT_STATEMENT]:t=>{const e=t.consume(1);switch(e[0]){case 0:return"yay";case 1:return"nay";case 2:return"pass";default:throw new J(e[0].toString())}},[i.PROPOSAL]:Bt,[i.PROPOSAL_ARR]:t=>{const e=[];for(t.consume(4);t.length()>0;)e.push(Bt(t));return e},[i.PARAMETERS]:t=>{if(0!==t.consume(1)[0]){const r=(t=>{const r=e(t.consume(1)[0],2);if(r in h)return h[r];{const e=ct(t,1),r=Et.from(e).toString("utf8");if(r.length>31)throw new W(r);return r}})(t),n=ct(t);return{entrypoint:r,value:dt(new at(n))}}},[i.ADDRESS]:t=>{switch(t.consume(1)[0]){case 0:return Lt(t);case 1:{const e=It(K.KT1)(t);return t.consume(1),e}default:throw new g(t.toString(),": Unable to decode.")}},[i.SMART_ROLLUP_ADDRESS]:t=>{const e=It(K.SR1)(t);if(e.substring(0,3)!==K.SR1)throw new ot(e,V(G.NO_PREFIX_MATCHED)+` expecting prefix '${K.SR1}'.`);return e},[i.SMART_CONTRACT_ADDRESS]:t=>{if(1===t.consume(1)[0]){const e=It(K.KT1)(t);return t.consume(1),e}throw new v(t.toString(),V(G.NO_PREFIX_MATCHED))},[i.SMART_ROLLUP_COMMITMENT_HASH]:t=>{const e=It(K.SRC1)(t);if(e.substring(0,4)!==K.SRC1)throw new st(e,V(G.NO_PREFIX_MATCHED)+` expecting prefix '${K.SRC1}'`);return e},[i.VALUE]:t=>{const e=ct(t);return dt(new at(e))},[i.INT16]:t=>{const e=t.consume(2);let r=0;for(let t=0;t{const e=ct(t);return Et.from(e).toString("utf8")},[i.TX_ROLLUP_ORIGINATION_PARAM]:t=>({}),[i.TX_ROLLUP_ID]:jt,[i.TX_ROLLUP_BATCH_CONTENT]:t=>{const e=ct(t);return Et.from(e).toString("hex")},[i.BURN_LIMIT]:t=>{const e=t.consume(1);if("00"!==Et.from(e).toString("hex"))return Ct(t)},[i.DEPOSITS_LIMIT]:t=>{const e=t.consume(1);if("00"!==Et.from(e).toString("hex"))return Ct(t)},[i.PVM_KIND]:t=>{const e=t.consume(1);switch(e[0]){case 0:return"arith";case 1:return"wasm_2_0_0";default:throw new it(e[0].toString())}},[i.PADDED_BYTES]:t=>{const e=ct(t);return Et.from(e).toString("hex")},[i.SMART_ROLLUP_MESSAGE]:t=>{const e=ct(t);return((t,e=4)=>{const r=[];let n=t;for(;n.length();){const t=n.consume(e),i=parseInt(ft.from(t).toString("hex"),16);r.push(n.consume(i)),n=n.slice(i+e)}return r})(new at(e)).map((t=>Et.from(t).toString("hex")))}};ce[i.OPERATION]=(t=>e=>{const r=e.consume(1),n=a[r[0]];if(void 0===n)throw new rt(r[0].toString());const i=t[n](e);if("object"!=typeof i)throw new tt("Invalid operation, cannot be decoded.");return Object.assign({kind:n},i)})(ce),ce[i.OP_ACTIVATE_ACCOUNT]=t=>de(ce)(Kt)(t),ce[i.OP_DELEGATION]=t=>de(ce)(Zt)(t),ce[i.OP_TRANSACTION]=t=>de(ce)(Gt)(t),ce[i.OP_ORIGINATION]=t=>de(ce)($t)(t),ce[i.OP_BALLOT]=t=>de(ce)(Vt)(t),ce[i.OP_ENDORSEMENT]=t=>de(ce)(Xt)(t),ce[i.OP_SEED_NONCE_REVELATION]=t=>de(ce)(Wt)(t),ce[i.OP_PROPOSALS]=t=>de(ce)(Yt)(t),ce[i.OP_REVEAL]=t=>de(ce)(Ft)(t),ce[i.OP_REGISTER_GLOBAL_CONSTANT]=t=>de(ce)(Jt)(t),ce[i.OP_TRANSFER_TICKET]=t=>de(ce)(Qt)(t),ce[i.OP_TX_ROLLUP_ORIGINATION]=t=>de(ce)(te)(t),ce[i.OP_TX_ROLLUP_SUBMIT_BATCH]=t=>de(ce)(ee)(t),ce[i.OP_INCREASE_PAID_STORAGE]=t=>de(ce)(re)(t),ce[i.OP_UPDATE_CONSENSUS_KEY]=t=>de(ce)(ne)(t),ce[i.OP_DRAIN_DELEGATE]=t=>de(ce)(ie)(t),ce[i.OP_SMART_ROLLUP_ORIGINATE]=t=>de(ce)(se)(t),ce[i.OP_SMART_ROLLUP_ADD_MESSAGES]=t=>de(ce)(ae)(t),ce[i.OP_SMART_ROLLUP_EXECUTE_OUTBOX_MESSAGE]=t=>de(ce)(fe)(t),ce[i.MANAGER]=de(ce)(qt),ce[i.OP_SET_DEPOSITS_LIMIT]=t=>de(ce)(oe)(t);const ue={[i.SECRET]:t=>t,[i.RAW]:t=>t,[i.TZ1]:Ot,[i.BRANCH]:Pt,[i.ZARITH]:Ut,[i.PUBLIC_KEY]:t=>{switch(t.substring(0,4)){case K.EDPK:return"00"+Mt(K.EDPK)(t);case K.SPPK:return"01"+Mt(K.SPPK)(t);case K.P2PK:return"02"+Mt(K.P2PK)(t);default:throw new _(t,V(G.NO_PREFIX_MATCHED)+` expecting one of the following '${K.EDPK}', '${K.SPPK}', '${K.P2PK}' or '${K.BLPK}'.`)}},[i.PKH]:kt,[i.DELEGATE]:t=>t?xt(!0)+kt(t):xt(!1),[i.SCRIPT]:t=>{const r=ht(t.code),n=ht(t.storage);return`${e(r.length/2,8)}${r}${e(n.length/2,8)}${n}`},[i.BALLOT_STATEMENT]:t=>{switch(t){case"yay":return"00";case"nay":return"01";case"pass":return"02";default:throw new Y(t)}},[i.PROPOSAL]:Nt,[i.PROPOSAL_ARR]:t=>e(32*t.length)+t.map((t=>Nt(t))).join(""),[i.INT32]:t=>{const e=parseInt(String(t),10),r=[];for(let t=0;t<4;t++){const n=8*(4-(t+1));r.push((e&255<>n)}return Et.from(r).toString("hex")},[i.PARAMETERS]:t=>{if(!t||"default"===t.entrypoint&&"prim"in t.value&&"Unit"===t.value.prim)return"00";const e=(t=>{if(t in d)return`${d[t]}`;if(t.length>31)throw new W(t);return`ff${ht({string:t}).slice(8)}`})(t.entrypoint),r=ht(t.value);return`ff${e}${(r.length/2).toString(16).padStart(8,"0")}${r}`},[i.ADDRESS]:t=>{switch(t.substring(0,3)){case K.TZ1:case K.TZ2:case K.TZ3:case K.TZ4:return"00"+kt(t);case K.KT1:return"01"+Mt(K.KT1)(t)+"00";default:throw new g(t,V(G.NO_PREFIX_MATCHED)+` expecting one of the following prefix '${K.TZ1}', ${K.TZ2}', '${K.TZ3}', '${K.TZ4}' or '${K.KT1}'.`)}},[i.SMART_ROLLUP_ADDRESS]:t=>{if(t.substring(0,3)!==K.SR1)throw new ot(t,V(G.NO_PREFIX_MATCHED)+` expecting prefix '${K.SR1}'.`);return Mt(K.SR1)(t)},[i.SMART_CONTRACT_ADDRESS]:t=>{if(t.substring(0,3)===K.KT1)return"01"+Mt(K.KT1)(t)+"00";throw new v(t,V(G.NO_PREFIX_MATCHED)+` expecting prefix '${K.KT1}'.`)},[i.SMART_ROLLUP_COMMITMENT_HASH]:t=>{if(t.substring(0,4)===K.SRC1)return Mt(K.SRC1)(t);throw new st(t,V(G.NO_PREFIX_MATCHED)+` expecting prefix '${K.SRC1}'`)},[i.VALUE]:t=>{const r=ht(t);return`${e(r.length/2)}${r}`},[i.INT16]:t=>{const e=parseInt(String(t),10),r=[];for(let t=0;t<2;t++){const n=8*(2-(t+1));r.push((e&255<>n)}return Et.from(r).toString("hex")},[i.BLOCK_PAYLOAD_HASH]:Dt,[i.ENTRYPOINT]:t=>`${ht({string:t}).slice(2)}`,[i.TX_ROLLUP_ORIGINATION_PARAM]:t=>"",[i.TX_ROLLUP_ID]:zt,[i.TX_ROLLUP_BATCH_CONTENT]:t=>`${e(t.length/2)}${t}`,[i.BURN_LIMIT]:t=>t?`ff${Ut(t)}`:"00",[i.DEPOSITS_LIMIT]:t=>t?`ff${Ut(t)}`:"00",[i.PVM_KIND]:t=>{switch(t){case"arith":return"00";case"wasm_2_0_0":return"01";default:throw new nt(t)}},[i.PADDED_BYTES]:(t,r=8)=>`${e(t.length/2,r)}${t}`,[i.SMART_ROLLUP_MESSAGE]:t=>{const r=t.reduce(((t,r)=>t+`${e(r.length/2)}${r}`),"");return`${e(r.length/2)}${r}`}};ue[i.OPERATION]=(t=>e=>{if(!(e.kind in t)||!(e.kind in f))throw new A(e.kind);return f[e.kind]+t[e.kind](e)})(ue),ue[i.OP_ACTIVATE_ACCOUNT]=t=>he(ue)(Kt)(t),ue[i.OP_DELEGATION]=t=>he(ue)(Zt)(t),ue[i.OP_TRANSACTION]=t=>he(ue)(Gt)(t),ue[i.OP_ORIGINATION]=t=>he(ue)($t)(t),ue[i.OP_BALLOT]=t=>he(ue)(Vt)(t),ue[i.OP_ENDORSEMENT]=t=>he(ue)(Xt)(t),ue[i.OP_SEED_NONCE_REVELATION]=t=>he(ue)(Wt)(t),ue[i.OP_PROPOSALS]=t=>he(ue)(Yt)(t),ue[i.OP_REVEAL]=t=>he(ue)(Ft)(t),ue[i.OP_REGISTER_GLOBAL_CONSTANT]=t=>he(ue)(Jt)(t),ue[i.OP_TRANSFER_TICKET]=t=>he(ue)(Qt)(t),ue[i.OP_TX_ROLLUP_ORIGINATION]=t=>he(ue)(te)(t),ue[i.OP_TX_ROLLUP_SUBMIT_BATCH]=t=>he(ue)(ee)(t),ue[i.OP_INCREASE_PAID_STORAGE]=t=>he(ue)(re)(t),ue[i.OP_UPDATE_CONSENSUS_KEY]=t=>he(ue)(ne)(t),ue[i.OP_DRAIN_DELEGATE]=t=>he(ue)(ie)(t),ue[i.OP_SMART_ROLLUP_ORIGINATE]=t=>he(ue)(se)(t),ue[i.OP_SMART_ROLLUP_ADD_MESSAGES]=t=>he(ue)(ae)(t),ue[i.OP_SMART_ROLLUP_EXECUTE_OUTBOX_MESSAGE]=t=>he(ue)(fe)(t),ue[i.MANAGER]=he(ue)(qt),ue[i.OP_SET_DEPOSITS_LIMIT]=t=>he(ue)(oe)(t);const le={activate_account:Kt,reveal:Ft,delegation:Zt,transaction:Gt,origination:$t,ballot:Vt,endorsement:Xt,seed_nonce_revelation:Wt,proposals:Yt,register_global_constant:Jt,transfer_ticket:Qt,tx_rollup_origination:te,tx_rollup_submit_batch:ee,increase_paid_storage:re,update_consensus_key:ne,drain_delegate:ie,set_deposits_limit:oe,smart_rollup_originate:se,smart_rollup_add_messages:ae,smart_rollup_execute_outbox_message:fe},be=t=>{const e=t.kind,r=Object.keys(t),n=("kind",r.filter((t=>"kind"!==t)));const i=Object.keys(le[e]);return o=n,i.filter((t=>!o.includes(t)));var o};var pe;!function(t){t.Pt24m4xi="Pt24m4xiPbLDhVgVfABUjirbmda3yohdN82Sp9FeuAXJ4eV9otd",t.PsBABY5H="PsBABY5HQTSkA4297zNHfsZNKtxULfL18y95qb3m53QJiXGmrbU",t.PsBabyM1="PsBabyM1eUXZseaJdmXFApDSBqj8YBfwELoxZHHW77EMcAbbwAS",t.PsCARTHA="PsCARTHAGazKbHtnKfLzQg3kms52kSRpgnDY982a9oYsSXRLQEb",t.PsDELPH1="PsDELPH1Kxsxt8f9eWbxQeRxkjfbxoqM52jvs5Y5fBxWWh4ifpo",t.PtEdo2Zk="PtEdo2ZkT9oKpimTah6x2embF25oss54njMuPzkJTEi5RqfdZFA",t.PsFLorena="PsFLorenaUUuikDWvMDr6fGBRG8kt3e3D3fHoXK1j1BFRxeSH4i",t.PtGRANADs="PtGRANADsDU8R9daYKAgWnQYAJ64omN1o3KMGVCykShA97vQbvV",t.PtHangz2="PtHangz2aRngywmSRGGvrcTyMbbdpWdpFKuS4uMWxg2RaH9i1qx",t.Psithaca2="Psithaca2MLRFYargivpo7YvUr7wUDqyxrdhC5CQq78mRvimz6A",t.PtJakart2="PtJakart2xVj7pYXJBXrqHgd82rdkLey5ZeeGwDgPp9rhQUbSqY",t.PtKathman="PtKathmankSpLLDALzWw7CGD2j2MtyveTwboEYokqUCP4a1LxMg",t.PtLimaPtL="PtLimaPtLMwfNinJi9rCfDPWea8dFgTZ1MeJ9f1m2SRic6ayiwW",t.PtMumbaii="PtMumbaiiFFEGbew1rRjzSPyzRbA51Tm3RVZL5suHPxSZYDhCEc",t.PtMumbai2="PtMumbai2TmsJHNGRkD8v8YDbtao7BLUC3wjASn1inAKLFCjaH1",t.PtNairobi="PtNairobiyssHuh87hEhfVBGCVrK3WnS8Z2FT4ymB5tAa4r1nQf",t.ProtoALpha="ProtoALphaALphaALphaALphaALphaALphaALphaALphaDdp3zK"}(pe||(pe={}));const ge={commitHash:"b357541c90c2168d48216d62a07de5dd3baab9a0",version:"17.0.0"},me=pe.PtMumbai2;function ye(t,e){return{encoder:ue[t],decoder:e=>{const r=at.fromHexString(e);return ce[t](r)}}}class _e{constructor(t=me){this.protocolHash=t,this.codec=ye(i.MANAGER,this.protocolHash)}forge(t){const e=function(t,e){const r=new RegExp(`^(${e.join("|")})`).exec(t);if(!r||0===r.length)return G.NO_PREFIX_MATCHED;const n=r[0];if(!function(t){return"string"==typeof t&&t in F}(n))return G.NO_PREFIX_MATCHED;if(t.includes("%")&&(t=t.split("%")[0]),!/^(KT1\w{33})$/.test(t)&&"KT1"===n)return G.INVALID_CHECKSUM;let i=l().decodeUnsafe(t);return i?(i=i.slice(F[n].length),i.length!==Z[n]?G.INVALID_LENGTH:G.VALID):G.INVALID_CHECKSUM}(t.branch,$);var r;if(e!==G.VALID)throw new m(t.branch,V(e));for(const e of t.contents){if(r=e.kind,!Object.keys(le).includes(r))throw new A(e.kind);const t=be(e);if(1===t.length){if("delegation"===e.kind&&"delegate"===t[0])continue;if("origination"===e.kind&&"delegate"===t[0])continue;if("transaction"===e.kind&&"parameters"===t[0])continue;if("set_deposits_limit"===e.kind&&"limit"===t[0])continue;if("tx_rollup_submit_batch"===e.kind&&"burn_limit"===t[0])continue;throw new X(e,`missing properties "${t.join(", ")}"`)}if(t.length>1)throw new X(e,`missing properties "${t.join(", ")}"`)}const n=this.codec.encoder(t).toLowerCase();return Promise.resolve(n)}parse(t){return Promise.resolve(this.codec.decoder(t))}}const ve=new _e})(),taquito_local_forging=n})(); +var taquito_local_forging;(()=>{var t={3525:(t,e)=>{"use strict";function r(t){if(!Number.isSafeInteger(t)||t<0)throw new Error(`Wrong positive integer: ${t}`)}function n(t){if("boolean"!=typeof t)throw new Error(`Expected boolean, not ${t}`)}function i(t,...e){if(!((r=t)instanceof Uint8Array||null!=r&&"object"==typeof r&&"Uint8Array"===r.constructor.name))throw new Error("Expected Uint8Array");var r;if(e.length>0&&!e.includes(t.length))throw new Error(`Expected Uint8Array of length ${e}, not of length=${t.length}`)}function f(t){if("function"!=typeof t||"function"!=typeof t.create)throw new Error("Hash should be wrapped by utils.wrapConstructor");r(t.outputLen),r(t.blockLen)}function o(t,e=!0){if(t.destroyed)throw new Error("Hash instance has been destroyed");if(e&&t.finished)throw new Error("Hash#digest() has already been called")}function s(t,e){i(t);const r=e.outputLen;if(t.length{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SHA2=void 0;const n=r(3525),i=r(64);class f extends i.Hash{constructor(t,e,r,n){super(),this.blockLen=t,this.outputLen=e,this.padOffset=r,this.isLE=n,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(t),this.view=(0,i.createView)(this.buffer)}update(t){(0,n.exists)(this);const{view:e,buffer:r,blockLen:f}=this,o=(t=(0,i.toBytes)(t)).length;for(let n=0;nf-s&&(this.process(r,0),s=0);for(let t=s;t>i&f),s=Number(r&f),a=n?4:0,d=n?0:4;t.setUint32(e+a,o,n),t.setUint32(e+d,s,n)}(r,f-8,BigInt(8*this.length),o),this.process(r,0);const a=(0,i.createView)(t),d=this.outputLen;if(d%4)throw new Error("_sha2: outputLen should be aligned to 32bit");const h=d/4,c=this.get();if(h>c.length)throw new Error("_sha2: outputLen bigger than state");for(let t=0;t{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.crypto=void 0,e.crypto="object"==typeof globalThis&&"crypto"in globalThis?globalThis.crypto:void 0},6053:(t,e,r)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.sha224=e.sha256=void 0;const n=r(9350),i=r(64),f=(t,e,r)=>t&e^t&r^e&r,o=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),s=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),a=new Uint32Array(64);class d extends n.SHA2{constructor(){super(64,32,8,!1),this.A=0|s[0],this.B=0|s[1],this.C=0|s[2],this.D=0|s[3],this.E=0|s[4],this.F=0|s[5],this.G=0|s[6],this.H=0|s[7]}get(){const{A:t,B:e,C:r,D:n,E:i,F:f,G:o,H:s}=this;return[t,e,r,n,i,f,o,s]}set(t,e,r,n,i,f,o,s){this.A=0|t,this.B=0|e,this.C=0|r,this.D=0|n,this.E=0|i,this.F=0|f,this.G=0|o,this.H=0|s}process(t,e){for(let r=0;r<16;r++,e+=4)a[r]=t.getUint32(e,!1);for(let t=16;t<64;t++){const e=a[t-15],r=a[t-2],n=(0,i.rotr)(e,7)^(0,i.rotr)(e,18)^e>>>3,f=(0,i.rotr)(r,17)^(0,i.rotr)(r,19)^r>>>10;a[t]=f+a[t-7]+n+a[t-16]|0}let{A:r,B:n,C:s,D:d,E:h,F:c,G:u,H:l}=this;for(let t=0;t<64;t++){const e=l+((0,i.rotr)(h,6)^(0,i.rotr)(h,11)^(0,i.rotr)(h,25))+((b=h)&c^~b&u)+o[t]+a[t]|0,p=((0,i.rotr)(r,2)^(0,i.rotr)(r,13)^(0,i.rotr)(r,22))+f(r,n,s)|0;l=u,u=c,c=h,h=d+e|0,d=s,s=n,n=r,r=e+p|0}var b;r=r+this.A|0,n=n+this.B|0,s=s+this.C|0,d=d+this.D|0,h=h+this.E|0,c=c+this.F|0,u=u+this.G|0,l=l+this.H|0,this.set(r,n,s,d,h,c,u,l)}roundClean(){a.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}}class h extends d{constructor(){super(),this.A=-1056596264,this.B=914150663,this.C=812702999,this.D=-150054599,this.E=-4191439,this.F=1750603025,this.G=1694076839,this.H=-1090891868,this.outputLen=28}}e.sha256=(0,i.wrapConstructor)((()=>new d)),e.sha224=(0,i.wrapConstructor)((()=>new h))},64:(t,e,r)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.randomBytes=e.wrapXOFConstructorWithOpts=e.wrapConstructorWithOpts=e.wrapConstructor=e.checkOpts=e.Hash=e.concatBytes=e.toBytes=e.utf8ToBytes=e.asyncLoop=e.nextTick=e.hexToBytes=e.bytesToHex=e.isLE=e.rotr=e.createView=e.u32=e.u8=void 0;const n=r(825);function i(t){return t instanceof Uint8Array||null!=t&&"object"==typeof t&&"Uint8Array"===t.constructor.name}if(e.u8=t=>new Uint8Array(t.buffer,t.byteOffset,t.byteLength),e.u32=t=>new Uint32Array(t.buffer,t.byteOffset,Math.floor(t.byteLength/4)),e.createView=t=>new DataView(t.buffer,t.byteOffset,t.byteLength),e.rotr=(t,e)=>t<<32-e|t>>>e,e.isLE=68===new Uint8Array(new Uint32Array([287454020]).buffer)[0],!e.isLE)throw new Error("Non little-endian hardware is not supported");const f=Array.from({length:256},((t,e)=>e.toString(16).padStart(2,"0")));e.bytesToHex=function(t){if(!i(t))throw new Error("Uint8Array expected");let e="";for(let r=0;r=o&&t<=s?t-o:t>=a&&t<=d?t-(a-10):t>=h&&t<=c?t-(h-10):void 0}function l(t){if("string"!=typeof t)throw new Error("utf8ToBytes expected string, got "+typeof t);return new Uint8Array((new TextEncoder).encode(t))}function b(t){if("string"==typeof t&&(t=l(t)),!i(t))throw new Error("expected Uint8Array, got "+typeof t);return t}e.hexToBytes=function(t){if("string"!=typeof t)throw new Error("hex string expected, got "+typeof t);const e=t.length,r=e/2;if(e%2)throw new Error("padded hex string expected, got unpadded hex of length "+e);const n=new Uint8Array(r);for(let e=0,i=0;e{},e.asyncLoop=async function(t,r,n){let i=Date.now();for(let f=0;f=0&&tt().update(b(e)).digest(),r=t();return e.outputLen=r.outputLen,e.blockLen=r.blockLen,e.create=()=>t(),e},e.wrapConstructorWithOpts=function(t){const e=(e,r)=>t(r).update(b(e)).digest(),r=t({});return e.outputLen=r.outputLen,e.blockLen=r.blockLen,e.create=e=>t(e),e},e.wrapXOFConstructorWithOpts=function(t){const e=(e,r)=>t(r).update(b(e)).digest(),r=t({});return e.outputLen=r.outputLen,e.blockLen=r.blockLen,e.create=e=>t(e),e},e.randomBytes=function(t=32){if(n.crypto&&"function"==typeof n.crypto.getRandomValues)return n.crypto.getRandomValues(new Uint8Array(t));throw new Error("crypto.getRandomValues must be defined")}},9437:(t,e,r)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=r(5457);function i(t,e,r){return void 0===e&&(e=new Uint8Array(2)),void 0===r&&(r=0),e[r+0]=t>>>8,e[r+1]=t>>>0,e}function f(t,e,r){return void 0===e&&(e=new Uint8Array(2)),void 0===r&&(r=0),e[r+0]=t>>>0,e[r+1]=t>>>8,e}function o(t,e){return void 0===e&&(e=0),t[e]<<24|t[e+1]<<16|t[e+2]<<8|t[e+3]}function s(t,e){return void 0===e&&(e=0),(t[e]<<24|t[e+1]<<16|t[e+2]<<8|t[e+3])>>>0}function a(t,e){return void 0===e&&(e=0),t[e+3]<<24|t[e+2]<<16|t[e+1]<<8|t[e]}function d(t,e){return void 0===e&&(e=0),(t[e+3]<<24|t[e+2]<<16|t[e+1]<<8|t[e])>>>0}function h(t,e,r){return void 0===e&&(e=new Uint8Array(4)),void 0===r&&(r=0),e[r+0]=t>>>24,e[r+1]=t>>>16,e[r+2]=t>>>8,e[r+3]=t>>>0,e}function c(t,e,r){return void 0===e&&(e=new Uint8Array(4)),void 0===r&&(r=0),e[r+0]=t>>>0,e[r+1]=t>>>8,e[r+2]=t>>>16,e[r+3]=t>>>24,e}function u(t,e,r){return void 0===e&&(e=new Uint8Array(8)),void 0===r&&(r=0),h(t/4294967296>>>0,e,r),h(t>>>0,e,r+4),e}function l(t,e,r){return void 0===e&&(e=new Uint8Array(8)),void 0===r&&(r=0),c(t>>>0,e,r),c(t/4294967296>>>0,e,r+4),e}e.readInt16BE=function(t,e){return void 0===e&&(e=0),(t[e+0]<<8|t[e+1])<<16>>16},e.readUint16BE=function(t,e){return void 0===e&&(e=0),(t[e+0]<<8|t[e+1])>>>0},e.readInt16LE=function(t,e){return void 0===e&&(e=0),(t[e+1]<<8|t[e])<<16>>16},e.readUint16LE=function(t,e){return void 0===e&&(e=0),(t[e+1]<<8|t[e])>>>0},e.writeUint16BE=i,e.writeInt16BE=i,e.writeUint16LE=f,e.writeInt16LE=f,e.readInt32BE=o,e.readUint32BE=s,e.readInt32LE=a,e.readUint32LE=d,e.writeUint32BE=h,e.writeInt32BE=h,e.writeUint32LE=c,e.writeInt32LE=c,e.readInt64BE=function(t,e){void 0===e&&(e=0);var r=o(t,e),n=o(t,e+4);return 4294967296*r+n-4294967296*(n>>31)},e.readUint64BE=function(t,e){return void 0===e&&(e=0),4294967296*s(t,e)+s(t,e+4)},e.readInt64LE=function(t,e){void 0===e&&(e=0);var r=a(t,e);return 4294967296*a(t,e+4)+r-4294967296*(r>>31)},e.readUint64LE=function(t,e){void 0===e&&(e=0);var r=d(t,e);return 4294967296*d(t,e+4)+r},e.writeUint64BE=u,e.writeInt64BE=u,e.writeUint64LE=l,e.writeInt64LE=l,e.readUintBE=function(t,e,r){if(void 0===r&&(r=0),t%8!=0)throw new Error("readUintBE supports only bitLengths divisible by 8");if(t/8>e.length-r)throw new Error("readUintBE: array is too short for the given bitLength");for(var n=0,i=1,f=t/8+r-1;f>=r;f--)n+=e[f]*i,i*=256;return n},e.readUintLE=function(t,e,r){if(void 0===r&&(r=0),t%8!=0)throw new Error("readUintLE supports only bitLengths divisible by 8");if(t/8>e.length-r)throw new Error("readUintLE: array is too short for the given bitLength");for(var n=0,i=1,f=r;f=i;o--)r[o]=e/f&255,f*=256;return r},e.writeUintLE=function(t,e,r,i){if(void 0===r&&(r=new Uint8Array(t/8)),void 0===i&&(i=0),t%8!=0)throw new Error("writeUintLE supports only bitLengths divisible by 8");if(!n.isSafeInteger(e))throw new Error("writeUintLE value must be an integer");for(var f=1,o=i;o{"use strict";var n=r(9437),i=r(2887);e.cn=128,e.k=64,e.Cv=64,e.fg=16,e.fe=16,e.zS=Math.pow(2,32)-1,e.d=255,e.lV=255;var f=new Uint32Array([4089235720,1779033703,2227873595,3144134277,4271175723,1013904242,1595750129,2773480762,2917565137,1359893119,725511199,2600822924,4215389547,528734635,327033209,1541459225]),o=[[0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30],[28,20,8,16,18,30,26,12,2,24,0,4,22,14,10,6],[22,16,24,0,10,4,30,26,20,28,6,12,14,2,18,8],[14,18,6,2,26,24,22,28,4,12,10,20,8,0,30,16],[18,0,10,14,4,8,20,30,28,2,22,24,12,16,6,26],[4,24,12,20,0,22,16,6,8,26,14,10,30,28,2,18],[24,10,2,30,28,26,8,20,0,14,12,6,18,4,16,22],[26,22,14,28,24,2,6,18,10,0,30,8,16,12,4,20],[12,30,28,18,22,6,0,16,24,4,26,14,2,8,20,10],[20,4,16,8,14,12,2,10,30,22,18,28,6,24,26,0],[0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30],[28,20,8,16,18,30,26,12,2,24,0,4,22,14,10,6]];!function(){function t(t,r){if(void 0===t&&(t=64),this.digestLength=t,this.blockSize=e.cn,this._state=new Int32Array(f),this._buffer=new Uint8Array(e.cn),this._bufferLength=0,this._ctr=new Uint32Array(4),this._flag=new Uint32Array(4),this._lastNode=!1,this._finished=!1,this._vtmp=new Uint32Array(32),this._mtmp=new Uint32Array(32),t<1||t>e.k)throw new Error("blake2b: wrong digest length");r&&this.validateConfig(r);var i=0;r&&r.key&&(i=r.key.length);var o=1,s=1;r&&r.tree&&(o=r.tree.fanout,s=r.tree.maxDepth),this._state[0]^=t|i<<8|o<<16|s<<24,r&&r.tree&&(this._state[1]^=r.tree.leafSize,this._state[2]^=r.tree.nodeOffsetLowBits,this._state[3]^=r.tree.nodeOffsetHighBits,this._state[4]^=r.tree.nodeDepth|r.tree.innerDigestLength<<8,this._lastNode=r.tree.lastNode),r&&r.salt&&(this._state[8]^=n.readUint32LE(r.salt,0),this._state[9]^=n.readUint32LE(r.salt,4),this._state[10]^=n.readUint32LE(r.salt,8),this._state[11]^=n.readUint32LE(r.salt,12)),r&&r.personalization&&(this._state[12]^=n.readUint32LE(r.personalization,0),this._state[13]^=n.readUint32LE(r.personalization,4),this._state[14]^=n.readUint32LE(r.personalization,8),this._state[15]^=n.readUint32LE(r.personalization,12)),this._initialState=new Uint32Array(this._state),r&&r.key&&i>0&&(this._paddedKey=new Uint8Array(e.cn),this._paddedKey.set(r.key),this._buffer.set(this._paddedKey),this._bufferLength=e.cn)}t.prototype.reset=function(){return this._state.set(this._initialState),this._paddedKey?(this._buffer.set(this._paddedKey),this._bufferLength=e.cn):this._bufferLength=0,i.wipe(this._ctr),i.wipe(this._flag),this._finished=!1,this},t.prototype.validateConfig=function(t){if(t.key&&t.key.length>e.Cv)throw new Error("blake2b: wrong key length");if(t.salt&&t.salt.length!==e.fe)throw new Error("blake2b: wrong salt length");if(t.personalization&&t.personalization.length!==e.fg)throw new Error("blake2b: wrong personalization length");if(t.tree){if(t.tree.fanout<0||t.tree.fanout>e.d)throw new Error("blake2b: wrong tree fanout");if(t.tree.maxDepth<0||t.tree.maxDepth>e.lV)throw new Error("blake2b: wrong tree depth");if(t.tree.leafSize<0||t.tree.leafSize>e.zS)throw new Error("blake2b: wrong leaf size");if(t.tree.innerDigestLength<0||t.tree.innerDigestLength>e.k)throw new Error("blake2b: wrong tree inner digest length")}},t.prototype.update=function(t,r){if(void 0===r&&(r=t.length),this._finished)throw new Error("blake2b: can't update because hash was finished.");var n=e.cn-this._bufferLength,i=0;if(0===r)return this;if(r>n){for(var f=0;fe.cn;){for(f=0;f>>16,S=65535&b,M=b>>>16;A+=p>>>16,S+=65535&g,M+=g>>>16,S+=(A+=(_+=65535&p)>>>16)>>>16,_=65535&(l=65535&_|A<<16),A=l>>>16,S=65535&(b=65535&S|(M+=S>>>16)<<16),M=b>>>16,A+=d>>>16,S+=65535&h,M+=h>>>16,l=65535&(_+=65535&d)|(A+=_>>>16)<<16,_=w^=b=65535&(S+=A>>>16)|(M+=S>>>16)<<16,w=v^=l,v=_,_=65535&m,A=m>>>16,S=65535&y,M=y>>>16,A+=v>>>16,S+=65535&w,M+=w>>>16,_=(p^=m=65535&(_+=65535&v)|(A+=_>>>16)<<16)<<8|(g^=y=65535&(S+=A>>>16)|(M+=S>>>16)<<16)>>>24,p=g<<8|p>>>24,g=_,_=65535&l,A=l>>>16,S=65535&b,M=b>>>16,A+=p>>>16,S+=65535&g,M+=g>>>16,S+=(A+=(_+=65535&p)>>>16)>>>16,_=65535&(l=65535&_|A<<16),A=l>>>16,S=65535&(b=65535&S|(M+=S>>>16)<<16),M=b>>>16,A+=c>>>16,S+=65535&u,M+=u>>>16,_=(v^=l=65535&(_+=65535&c)|(A+=_>>>16)<<16)<<16|(w^=b=65535&(S+=A>>>16)|(M+=S>>>16)<<16)>>>16,v=w<<16|v>>>16,w=_,_=65535&m,A=m>>>16,S=65535&y,M=y>>>16,A+=v>>>16,S+=65535&w,M+=w>>>16,_=(g^=y=65535&(S+=(A+=(_+=65535&v)>>>16)>>>16)|(M+=S>>>16)<<16)<<1|(p^=m=65535&_|A<<16)>>>31,p=p<<1|g>>>31,g=_,t[e]=l,t[f]=b,t[r]=p,t[o]=g,t[n]=m,t[s]=y,t[i]=v,t[a]=w},t.prototype._incrementCounter=function(t){for(var e=0;e<3;e++){var r=this._ctr[e]+t;if(this._ctr[e]=r>>>0,this._ctr[e]===r)return;t=1}},t.prototype._processBlock=function(t){this._incrementCounter(t);var e=this._vtmp;e.set(this._state),e.set(f,16),e[24]^=this._ctr[0],e[25]^=this._ctr[1],e[26]^=this._ctr[2],e[27]^=this._ctr[3],e[28]^=this._flag[0],e[29]^=this._flag[1],e[30]^=this._flag[2],e[31]^=this._flag[3];for(var r=this._mtmp,i=0;i<32;i++)r[i]=n.readUint32LE(this._buffer,4*i);for(var s=0;s<12;s++)this._G(e,0,8,16,24,1,9,17,25,r[o[s][0]],r[o[s][0]+1],r[o[s][1]],r[o[s][1]+1]),this._G(e,2,10,18,26,3,11,19,27,r[o[s][2]],r[o[s][2]+1],r[o[s][3]],r[o[s][3]+1]),this._G(e,4,12,20,28,5,13,21,29,r[o[s][4]],r[o[s][4]+1],r[o[s][5]],r[o[s][5]+1]),this._G(e,6,14,22,30,7,15,23,31,r[o[s][6]],r[o[s][6]+1],r[o[s][7]],r[o[s][7]+1]),this._G(e,0,10,20,30,1,11,21,31,r[o[s][8]],r[o[s][8]+1],r[o[s][9]],r[o[s][9]+1]),this._G(e,2,12,22,24,3,13,23,25,r[o[s][10]],r[o[s][10]+1],r[o[s][11]],r[o[s][11]+1]),this._G(e,4,14,16,26,5,15,17,27,r[o[s][12]],r[o[s][12]+1],r[o[s][13]],r[o[s][13]+1]),this._G(e,6,8,18,28,7,9,19,29,r[o[s][14]],r[o[s][14]+1],r[o[s][15]],r[o[s][15]+1]);for(i=0;i<16;i++)this._state[i]^=e[i]^e[i+16]}}()},7728:(t,e,r)=>{"use strict";e.aP=e.KS=e.jQ=void 0;r(1293),r(6756),r(2887);function n(t){const e=new Float64Array(16);if(t)for(let r=0;r{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.mul=Math.imul||function(t,e){var r=65535&t,n=65535&e;return r*n+((t>>>16&65535)*n+r*(e>>>16&65535)<<16>>>0)|0},e.add=function(t,e){return t+e|0},e.sub=function(t,e){return t-e|0},e.rotl=function(t,e){return t<>>32-e},e.rotr=function(t,e){return t<<32-e|t>>>e},e.isInteger=Number.isInteger||function(t){return"number"==typeof t&&isFinite(t)&&Math.floor(t)===t},e.MAX_SAFE_INTEGER=9007199254740991,e.isSafeInteger=function(t){return e.isInteger(t)&&t>=-e.MAX_SAFE_INTEGER&&t<=e.MAX_SAFE_INTEGER}},1293:(t,e,r)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.randomStringForEntropy=e.randomString=e.randomUint32=e.randomBytes=e.defaultRandomSource=void 0;const n=r(5147),i=r(9437),f=r(2887);function o(t,r=e.defaultRandomSource){return r.randomBytes(t)}e.defaultRandomSource=new n.SystemRandomSource,e.randomBytes=o,e.randomUint32=function(t=e.defaultRandomSource){const r=o(4,t),n=(0,i.readUint32LE)(r);return(0,f.wipe)(r),n};const s="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";function a(t,r=s,n=e.defaultRandomSource){if(r.length<2)throw new Error("randomString charset is too short");if(r.length>256)throw new Error("randomString charset is too long");let i="";const a=r.length,d=256-256%a;for(;t>0;){const e=o(Math.ceil(256*t/d),n);for(let n=0;n0;n++){const f=e[n];f{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.BrowserRandomSource=void 0,e.BrowserRandomSource=class{constructor(){this.isAvailable=!1,this.isInstantiated=!1;const t="undefined"!=typeof self?self.crypto||self.msCrypto:null;t&&void 0!==t.getRandomValues&&(this._crypto=t,this.isAvailable=!0,this.isInstantiated=!0)}randomBytes(t){if(!this.isAvailable||!this._crypto)throw new Error("Browser random byte generator is not available.");const e=new Uint8Array(t);for(let t=0;t{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.NodeRandomSource=void 0;const n=r(2887);e.NodeRandomSource=class{constructor(){this.isAvailable=!1,this.isInstantiated=!1;{const t=r(5477);t&&t.randomBytes&&(this._crypto=t,this.isAvailable=!0,this.isInstantiated=!0)}}randomBytes(t){if(!this.isAvailable||!this._crypto)throw new Error("Node.js random byte generator is not available.");let e=this._crypto.randomBytes(t);if(e.length!==t)throw new Error("NodeRandomSource: got fewer bytes than requested");const r=new Uint8Array(t);for(let t=0;t{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SystemRandomSource=void 0;const n=r(2017),i=r(7879);e.SystemRandomSource=class{constructor(){return this.isAvailable=!1,this.name="",this._source=new n.BrowserRandomSource,this._source.isAvailable?(this.isAvailable=!0,void(this.name="Browser")):(this._source=new i.NodeRandomSource,this._source.isAvailable?(this.isAvailable=!0,void(this.name="Node")):void 0)}randomBytes(t){if(!this.isAvailable)throw new Error("System random byte generator is not available.");return this._source.randomBytes(t)}}},6756:(t,e,r)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=r(9437),i=r(2887);e.DIGEST_LENGTH=64,e.BLOCK_SIZE=128;var f=function(){function t(){this.digestLength=e.DIGEST_LENGTH,this.blockSize=e.BLOCK_SIZE,this._stateHi=new Int32Array(8),this._stateLo=new Int32Array(8),this._tempHi=new Int32Array(16),this._tempLo=new Int32Array(16),this._buffer=new Uint8Array(256),this._bufferLength=0,this._bytesHashed=0,this._finished=!1,this.reset()}return t.prototype._initState=function(){this._stateHi[0]=1779033703,this._stateHi[1]=3144134277,this._stateHi[2]=1013904242,this._stateHi[3]=2773480762,this._stateHi[4]=1359893119,this._stateHi[5]=2600822924,this._stateHi[6]=528734635,this._stateHi[7]=1541459225,this._stateLo[0]=4089235720,this._stateLo[1]=2227873595,this._stateLo[2]=4271175723,this._stateLo[3]=1595750129,this._stateLo[4]=2917565137,this._stateLo[5]=725511199,this._stateLo[6]=4215389547,this._stateLo[7]=327033209},t.prototype.reset=function(){return this._initState(),this._bufferLength=0,this._bytesHashed=0,this._finished=!1,this},t.prototype.clean=function(){i.wipe(this._buffer),i.wipe(this._tempHi),i.wipe(this._tempLo),this.reset()},t.prototype.update=function(t,r){if(void 0===r&&(r=t.length),this._finished)throw new Error("SHA512: can't update because hash was finished.");var n=0;if(this._bytesHashed+=r,this._bufferLength>0){for(;this._bufferLength0;)this._buffer[this._bufferLength++]=t[n++],r--;this._bufferLength===this.blockSize&&(s(this._tempHi,this._tempLo,this._stateHi,this._stateLo,this._buffer,0,this.blockSize),this._bufferLength=0)}for(r>=this.blockSize&&(n=s(this._tempHi,this._tempLo,this._stateHi,this._stateLo,t,n,r),r%=this.blockSize);r>0;)this._buffer[this._bufferLength++]=t[n++],r--;return this},t.prototype.finish=function(t){if(!this._finished){var e=this._bytesHashed,r=this._bufferLength,i=e/536870912|0,f=e<<3,o=e%128<112?128:256;this._buffer[r]=128;for(var a=r+1;a0?new Uint8Array(this._buffer):void 0,bufferLength:this._bufferLength,bytesHashed:this._bytesHashed}},t.prototype.restoreState=function(t){return this._stateHi.set(t.stateHi),this._stateLo.set(t.stateLo),this._bufferLength=t.bufferLength,t.buffer&&this._buffer.set(t.buffer),this._bytesHashed=t.bytesHashed,this._finished=!1,this},t.prototype.cleanSavedState=function(t){i.wipe(t.stateHi),i.wipe(t.stateLo),t.buffer&&i.wipe(t.buffer),t.bufferLength=0,t.bytesHashed=0},t}();e.SHA512=f;var o=new Int32Array([1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591]);function s(t,e,r,i,f,s,a){for(var d,h,c,u,l,b,p,g,m=r[0],y=r[1],v=r[2],w=r[3],_=r[4],A=r[5],S=r[6],M=r[7],E=i[0],I=i[1],T=i[2],R=i[3],P=i[4],L=i[5],O=i[6],x=i[7];a>=128;){for(var U=0;U<16;U++){var N=8*U+s;t[U]=n.readUint32BE(f,N),e[U]=n.readUint32BE(f,N+4)}for(U=0;U<80;U++){var B,k,D=m,C=y,H=v,z=w,K=_,q=A,F=S,Z=E,j=I,G=T,$=R,V=P,Y=L,X=O;if(l=65535&(h=x),b=h>>>16,p=65535&(d=M),g=d>>>16,l+=65535&(h=(P>>>14|_<<18)^(P>>>18|_<<14)^(_>>>9|P<<23)),b+=h>>>16,p+=65535&(d=(_>>>14|P<<18)^(_>>>18|P<<14)^(P>>>9|_<<23)),g+=d>>>16,l+=65535&(h=P&L^~P&O),b+=h>>>16,p+=65535&(d=_&A^~_&S),g+=d>>>16,d=o[2*U],l+=65535&(h=o[2*U+1]),b+=h>>>16,p+=65535&d,g+=d>>>16,d=t[U%16],b+=(h=e[U%16])>>>16,p+=65535&d,g+=d>>>16,p+=(b+=(l+=65535&h)>>>16)>>>16,l=65535&(h=u=65535&l|b<<16),b=h>>>16,p=65535&(d=c=65535&p|(g+=p>>>16)<<16),g=d>>>16,l+=65535&(h=(E>>>28|m<<4)^(m>>>2|E<<30)^(m>>>7|E<<25)),b+=h>>>16,p+=65535&(d=(m>>>28|E<<4)^(E>>>2|m<<30)^(E>>>7|m<<25)),g+=d>>>16,b+=(h=E&I^E&T^I&T)>>>16,p+=65535&(d=m&y^m&v^y&v),g+=d>>>16,B=65535&(p+=(b+=(l+=65535&h)>>>16)>>>16)|(g+=p>>>16)<<16,k=65535&l|b<<16,l=65535&(h=$),b=h>>>16,p=65535&(d=z),g=d>>>16,b+=(h=u)>>>16,p+=65535&(d=c),g+=d>>>16,y=D,v=C,w=H,_=z=65535&(p+=(b+=(l+=65535&h)>>>16)>>>16)|(g+=p>>>16)<<16,A=K,S=q,M=F,m=B,I=Z,T=j,R=G,P=$=65535&l|b<<16,L=V,O=Y,x=X,E=k,U%16==15)for(N=0;N<16;N++)d=t[N],l=65535&(h=e[N]),b=h>>>16,p=65535&d,g=d>>>16,d=t[(N+9)%16],l+=65535&(h=e[(N+9)%16]),b+=h>>>16,p+=65535&d,g+=d>>>16,c=t[(N+1)%16],l+=65535&(h=((u=e[(N+1)%16])>>>1|c<<31)^(u>>>8|c<<24)^(u>>>7|c<<25)),b+=h>>>16,p+=65535&(d=(c>>>1|u<<31)^(c>>>8|u<<24)^c>>>7),g+=d>>>16,c=t[(N+14)%16],b+=(h=((u=e[(N+14)%16])>>>19|c<<13)^(c>>>29|u<<3)^(u>>>6|c<<26))>>>16,p+=65535&(d=(c>>>19|u<<13)^(u>>>29|c<<3)^c>>>6),g+=d>>>16,g+=(p+=(b+=(l+=65535&h)>>>16)>>>16)>>>16,t[N]=65535&p|g<<16,e[N]=65535&l|b<<16}l=65535&(h=E),b=h>>>16,p=65535&(d=m),g=d>>>16,d=r[0],b+=(h=i[0])>>>16,p+=65535&d,g+=d>>>16,g+=(p+=(b+=(l+=65535&h)>>>16)>>>16)>>>16,r[0]=m=65535&p|g<<16,i[0]=E=65535&l|b<<16,l=65535&(h=I),b=h>>>16,p=65535&(d=y),g=d>>>16,d=r[1],b+=(h=i[1])>>>16,p+=65535&d,g+=d>>>16,g+=(p+=(b+=(l+=65535&h)>>>16)>>>16)>>>16,r[1]=y=65535&p|g<<16,i[1]=I=65535&l|b<<16,l=65535&(h=T),b=h>>>16,p=65535&(d=v),g=d>>>16,d=r[2],b+=(h=i[2])>>>16,p+=65535&d,g+=d>>>16,g+=(p+=(b+=(l+=65535&h)>>>16)>>>16)>>>16,r[2]=v=65535&p|g<<16,i[2]=T=65535&l|b<<16,l=65535&(h=R),b=h>>>16,p=65535&(d=w),g=d>>>16,d=r[3],b+=(h=i[3])>>>16,p+=65535&d,g+=d>>>16,g+=(p+=(b+=(l+=65535&h)>>>16)>>>16)>>>16,r[3]=w=65535&p|g<<16,i[3]=R=65535&l|b<<16,l=65535&(h=P),b=h>>>16,p=65535&(d=_),g=d>>>16,d=r[4],b+=(h=i[4])>>>16,p+=65535&d,g+=d>>>16,g+=(p+=(b+=(l+=65535&h)>>>16)>>>16)>>>16,r[4]=_=65535&p|g<<16,i[4]=P=65535&l|b<<16,l=65535&(h=L),b=h>>>16,p=65535&(d=A),g=d>>>16,d=r[5],b+=(h=i[5])>>>16,p+=65535&d,g+=d>>>16,g+=(p+=(b+=(l+=65535&h)>>>16)>>>16)>>>16,r[5]=A=65535&p|g<<16,i[5]=L=65535&l|b<<16,l=65535&(h=O),b=h>>>16,p=65535&(d=S),g=d>>>16,d=r[6],b+=(h=i[6])>>>16,p+=65535&d,g+=d>>>16,g+=(p+=(b+=(l+=65535&h)>>>16)>>>16)>>>16,r[6]=S=65535&p|g<<16,i[6]=O=65535&l|b<<16,l=65535&(h=x),b=h>>>16,p=65535&(d=M),g=d>>>16,d=r[7],b+=(h=i[7])>>>16,p+=65535&d,g+=d>>>16,g+=(p+=(b+=(l+=65535&h)>>>16)>>>16)>>>16,r[7]=M=65535&p|g<<16,i[7]=x=65535&l|b<<16,s+=128,a-=128}return s}e.hash=function(t){var e=new f;e.update(t);var r=e.digest();return e.clean(),r}},2887:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.wipe=function(t){for(var e=0;e{"use strict";t.exports=function(t){if(t.length>=255)throw new TypeError("Alphabet too long");for(var e=new Uint8Array(256),r=0;r>>0,d=new Uint8Array(f);t[r];){var h=e[t.charCodeAt(r)];if(255===h)return;for(var c=0,u=f-1;(0!==h||c>>0,d[u]=h%256>>>0,h=h/256>>>0;if(0!==h)throw new Error("Non-zero carry");i=c,r++}for(var l=f-i;l!==f&&0===d[l];)l++;for(var b=new Uint8Array(n+(f-l)),p=n;l!==f;)b[p++]=d[l++];return b}return{encode:function(e){if(e instanceof Uint8Array||(ArrayBuffer.isView(e)?e=new Uint8Array(e.buffer,e.byteOffset,e.byteLength):Array.isArray(e)&&(e=Uint8Array.from(e))),!(e instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(0===e.length)return"";for(var r=0,n=0,i=0,f=e.length;i!==f&&0===e[i];)i++,r++;for(var a=(f-i)*d+1>>>0,h=new Uint8Array(a);i!==f;){for(var c=e[i],u=0,l=a-1;(0!==c||u>>0,h[l]=c%o>>>0,c=c/o>>>0;if(0!==c)throw new Error("Non-zero carry");n=u,i++}for(var b=a-n;b!==a&&0===h[b];)b++;for(var p=s.repeat(r);b{"use strict";e.byteLength=function(t){var e=s(t),r=e[0],n=e[1];return 3*(r+n)/4-n},e.toByteArray=function(t){var e,r,f=s(t),o=f[0],a=f[1],d=new i(function(t,e,r){return 3*(e+r)/4-r}(0,o,a)),h=0,c=a>0?o-4:o;for(r=0;r>16&255,d[h++]=e>>8&255,d[h++]=255&e;return 2===a&&(e=n[t.charCodeAt(r)]<<2|n[t.charCodeAt(r+1)]>>4,d[h++]=255&e),1===a&&(e=n[t.charCodeAt(r)]<<10|n[t.charCodeAt(r+1)]<<4|n[t.charCodeAt(r+2)]>>2,d[h++]=e>>8&255,d[h++]=255&e),d},e.fromByteArray=function(t){for(var e,n=t.length,i=n%3,f=[],o=16383,s=0,d=n-i;sd?d:s+o));return 1===i?(e=t[n-1],f.push(r[e>>2]+r[e<<4&63]+"==")):2===i&&(e=(t[n-2]<<8)+t[n-1],f.push(r[e>>10]+r[e>>4&63]+r[e<<2&63]+"=")),f.join("")};for(var r=[],n=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",o=0;o<64;++o)r[o]=f[o],n[f.charCodeAt(o)]=o;function s(t){var e=t.length;if(e%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function a(t,e,n){for(var i,f,o=[],s=e;s>18&63]+r[f>>12&63]+r[f>>6&63]+r[63&f]);return o.join("")}n["-".charCodeAt(0)]=62,n["_".charCodeAt(0)]=63},651:(t,e,r)=>{const n=r(7967);function i(t,e,r){const n=t[e]+t[r];let i=t[e+1]+t[r+1];n>=4294967296&&i++,t[e]=n,t[e+1]=i}function f(t,e,r,n){let i=t[e]+r;r<0&&(i+=4294967296);let f=t[e+1]+n;i>=4294967296&&f++,t[e]=i,t[e+1]=f}function o(t,e){return t[e]^t[e+1]<<8^t[e+2]<<16^t[e+3]<<24}function s(t,e,r,n,o,s){const a=c[o],d=c[o+1],u=c[s],l=c[s+1];i(h,t,e),f(h,t,a,d);let b=h[n]^h[t],p=h[n+1]^h[t+1];h[n]=p,h[n+1]=b,i(h,r,n),b=h[e]^h[r],p=h[e+1]^h[r+1],h[e]=b>>>24^p<<8,h[e+1]=p>>>24^b<<8,i(h,t,e),f(h,t,u,l),b=h[n]^h[t],p=h[n+1]^h[t+1],h[n]=b>>>16^p<<16,h[n+1]=p>>>16^b<<16,i(h,r,n),b=h[e]^h[r],p=h[e+1]^h[r+1],h[e]=p>>>31^b<<1,h[e+1]=b>>>31^p<<1}const a=new Uint32Array([4089235720,1779033703,2227873595,3144134277,4271175723,1013904242,1595750129,2773480762,2917565137,1359893119,725511199,2600822924,4215389547,528734635,327033209,1541459225]),d=new Uint8Array([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,14,10,4,8,9,15,13,6,1,12,0,2,11,7,5,3,11,8,12,0,5,2,15,13,10,14,3,6,7,1,9,4,7,9,3,1,13,12,11,14,2,6,5,10,4,0,15,8,9,0,5,7,2,4,10,15,14,1,11,12,6,8,3,13,2,12,6,10,0,11,8,3,4,13,7,5,15,14,1,9,12,5,1,15,14,13,4,10,0,7,6,3,9,2,8,11,13,11,7,14,12,1,3,9,5,0,15,4,8,6,2,10,6,15,14,9,11,3,0,8,12,2,13,7,1,4,10,5,10,2,8,4,7,6,1,5,15,11,9,14,3,12,13,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,14,10,4,8,9,15,13,6,1,12,0,2,11,7,5,3].map((function(t){return 2*t}))),h=new Uint32Array(32),c=new Uint32Array(32);function u(t,e){let r=0;for(r=0;r<16;r++)h[r]=t.h[r],h[r+16]=a[r];for(h[24]=h[24]^t.t,h[25]=h[25]^t.t/4294967296,e&&(h[28]=~h[28],h[29]=~h[29]),r=0;r<32;r++)c[r]=o(t.b,4*r);for(r=0;r<12;r++)s(0,8,16,24,d[16*r+0],d[16*r+1]),s(2,10,18,26,d[16*r+2],d[16*r+3]),s(4,12,20,28,d[16*r+4],d[16*r+5]),s(6,14,22,30,d[16*r+6],d[16*r+7]),s(0,10,20,30,d[16*r+8],d[16*r+9]),s(2,12,22,24,d[16*r+10],d[16*r+11]),s(4,14,16,26,d[16*r+12],d[16*r+13]),s(6,8,18,28,d[16*r+14],d[16*r+15]);for(r=0;r<16;r++)t.h[r]=t.h[r]^h[r]^h[r+16]}const l=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]);function b(t,e,r,n){if(0===t||t>64)throw new Error("Illegal output length, expected 0 < length <= 64");if(e&&e.length>64)throw new Error("Illegal key, expected Uint8Array with 0 < length <= 64");if(r&&16!==r.length)throw new Error("Illegal salt, expected Uint8Array with length is 16");if(n&&16!==n.length)throw new Error("Illegal personal, expected Uint8Array with length is 16");const i={b:new Uint8Array(128),h:new Uint32Array(16),t:0,c:0,outlen:t};l.fill(0),l[0]=t,e&&(l[1]=e.length),l[2]=1,l[3]=1,r&&l.set(r,32),n&&l.set(n,48);for(let t=0;t<16;t++)i.h[t]=a[t]^o(l,4*t);return e&&(p(i,e),i.c=128),i}function p(t,e){for(let r=0;r>2]>>8*(3&r);return e}function m(t,e,r,i,f){r=r||64,t=n.normalizeInput(t),i&&(i=n.normalizeInput(i)),f&&(f=n.normalizeInput(f));const o=b(r,e,i,f);return p(o,t),g(o)}t.exports={blake2b:m,blake2bHex:function(t,e,r,i,f){const o=m(t,e,r,i,f);return n.toHex(o)},blake2bInit:b,blake2bUpdate:p,blake2bFinal:g}},9962:(t,e,r)=>{const n=r(7967);function i(t,e){return t[e]^t[e+1]<<8^t[e+2]<<16^t[e+3]<<24}function f(t,e,r,n,i,f){d[t]=d[t]+d[e]+i,d[n]=o(d[n]^d[t],16),d[r]=d[r]+d[n],d[e]=o(d[e]^d[r],12),d[t]=d[t]+d[e]+f,d[n]=o(d[n]^d[t],8),d[r]=d[r]+d[n],d[e]=o(d[e]^d[r],7)}function o(t,e){return t>>>e^t<<32-e}const s=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),a=new Uint8Array([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,14,10,4,8,9,15,13,6,1,12,0,2,11,7,5,3,11,8,12,0,5,2,15,13,10,14,3,6,7,1,9,4,7,9,3,1,13,12,11,14,2,6,5,10,4,0,15,8,9,0,5,7,2,4,10,15,14,1,11,12,6,8,3,13,2,12,6,10,0,11,8,3,4,13,7,5,15,14,1,9,12,5,1,15,14,13,4,10,0,7,6,3,9,2,8,11,13,11,7,14,12,1,3,9,5,0,15,4,8,6,2,10,6,15,14,9,11,3,0,8,12,2,13,7,1,4,10,5,10,2,8,4,7,6,1,5,15,11,9,14,3,12,13,0]),d=new Uint32Array(16),h=new Uint32Array(16);function c(t,e){let r=0;for(r=0;r<8;r++)d[r]=t.h[r],d[r+8]=s[r];for(d[12]^=t.t,d[13]^=t.t/4294967296,e&&(d[14]=~d[14]),r=0;r<16;r++)h[r]=i(t.b,4*r);for(r=0;r<10;r++)f(0,4,8,12,h[a[16*r+0]],h[a[16*r+1]]),f(1,5,9,13,h[a[16*r+2]],h[a[16*r+3]]),f(2,6,10,14,h[a[16*r+4]],h[a[16*r+5]]),f(3,7,11,15,h[a[16*r+6]],h[a[16*r+7]]),f(0,5,10,15,h[a[16*r+8]],h[a[16*r+9]]),f(1,6,11,12,h[a[16*r+10]],h[a[16*r+11]]),f(2,7,8,13,h[a[16*r+12]],h[a[16*r+13]]),f(3,4,9,14,h[a[16*r+14]],h[a[16*r+15]]);for(r=0;r<8;r++)t.h[r]^=d[r]^d[r+8]}function u(t,e){if(!(t>0&&t<=32))throw new Error("Incorrect output length, should be in [1, 32]");const r=e?e.length:0;if(e&&!(r>0&&r<=32))throw new Error("Incorrect key length, should be in [1, 32]");const n={h:new Uint32Array(s),b:new Uint8Array(64),c:0,t:0,outlen:t};return n.h[0]^=16842752^r<<8^t,r>0&&(l(n,e),n.c=64),n}function l(t,e){for(let r=0;r>2]>>8*(3&r)&255;return e}function p(t,e,r){r=r||32,t=n.normalizeInput(t);const i=u(r,e);return l(i,t),b(i)}t.exports={blake2s:p,blake2sHex:function(t,e,r){const i=p(t,e,r);return n.toHex(i)},blake2sInit:u,blake2sUpdate:l,blake2sFinal:b}},1395:(t,e,r)=>{const n=r(651),i=r(9962);t.exports={blake2b:n.blake2b,blake2bHex:n.blake2bHex,blake2bInit:n.blake2bInit,blake2bUpdate:n.blake2bUpdate,blake2bFinal:n.blake2bFinal,blake2s:i.blake2s,blake2sHex:i.blake2sHex,blake2sInit:i.blake2sInit,blake2sUpdate:i.blake2sUpdate,blake2sFinal:i.blake2sFinal}},7967:t=>{function e(t){return(4294967296+t).toString(16).substring(1)}t.exports={normalizeInput:function(t){let e;if(t instanceof Uint8Array)e=t;else{if("string"!=typeof t)throw new Error("Input must be an string, Buffer or Uint8Array");e=(new TextEncoder).encode(t)}return e},toHex:function(t){return Array.prototype.map.call(t,(function(t){return(t<16?"0":"")+t.toString(16)})).join("")},debugPrint:function(t,r,n){let i="\n"+t+" = ";for(let f=0;f=65&&r<=70?r-55:r>=97&&r<=102?r-87:r-48&15}function a(t,e,r){var n=s(t,r);return r-1>=e&&(n|=s(t,r-1)<<4),n}function d(t,e,r,n){for(var i=0,f=Math.min(t.length,r),o=e;o=49?s-49+10:s>=17?s-17+10:s}return i}f.isBN=function(t){return t instanceof f||null!==t&&"object"==typeof t&&t.constructor.wordSize===f.wordSize&&Array.isArray(t.words)},f.max=function(t,e){return t.cmp(e)>0?t:e},f.min=function(t,e){return t.cmp(e)<0?t:e},f.prototype._init=function(t,e,r){if("number"==typeof t)return this._initNumber(t,e,r);if("object"==typeof t)return this._initArray(t,e,r);"hex"===e&&(e=16),n(e===(0|e)&&e>=2&&e<=36);var i=0;"-"===(t=t.toString().replace(/\s+/g,""))[0]&&(i++,this.negative=1),i=0;i-=3)o=t[i]|t[i-1]<<8|t[i-2]<<16,this.words[f]|=o<>>26-s&67108863,(s+=24)>=26&&(s-=26,f++);else if("le"===r)for(i=0,f=0;i>>26-s&67108863,(s+=24)>=26&&(s-=26,f++);return this.strip()},f.prototype._parseHex=function(t,e,r){this.length=Math.ceil((t.length-e)/6),this.words=new Array(this.length);for(var n=0;n=e;n-=2)i=a(t,e,n)<=18?(f-=18,o+=1,this.words[o]|=i>>>26):f+=8;else for(n=(t.length-e)%2==0?e+1:e;n=18?(f-=18,o+=1,this.words[o]|=i>>>26):f+=8;this.strip()},f.prototype._parseBase=function(t,e,r){this.words=[0],this.length=1;for(var n=0,i=1;i<=67108863;i*=e)n++;n--,i=i/e|0;for(var f=t.length-r,o=f%n,s=Math.min(f,f-o)+r,a=0,h=r;h1&&0===this.words[this.length-1];)this.length--;return this._normSign()},f.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},f.prototype.inspect=function(){return(this.red?""};var h=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],c=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],u=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function l(t,e,r){r.negative=e.negative^t.negative;var n=t.length+e.length|0;r.length=n,n=n-1|0;var i=0|t.words[0],f=0|e.words[0],o=i*f,s=67108863&o,a=o/67108864|0;r.words[0]=s;for(var d=1;d>>26,c=67108863&a,u=Math.min(d,e.length-1),l=Math.max(0,d-t.length+1);l<=u;l++){var b=d-l|0;h+=(o=(i=0|t.words[b])*(f=0|e.words[l])+c)/67108864|0,c=67108863&o}r.words[d]=0|c,a=0|h}return 0!==a?r.words[d]=0|a:r.length--,r.strip()}f.prototype.toString=function(t,e){var r;if(e=0|e||1,16===(t=t||10)||"hex"===t){r="";for(var i=0,f=0,o=0;o>>24-i&16777215)||o!==this.length-1?h[6-a.length]+a+r:a+r,(i+=2)>=26&&(i-=26,o--)}for(0!==f&&(r=f.toString(16)+r);r.length%e!=0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}if(t===(0|t)&&t>=2&&t<=36){var d=c[t],l=u[t];r="";var b=this.clone();for(b.negative=0;!b.isZero();){var p=b.modn(l).toString(t);r=(b=b.idivn(l)).isZero()?p+r:h[d-p.length]+p+r}for(this.isZero()&&(r="0"+r);r.length%e!=0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}n(!1,"Base should be between 2 and 36")},f.prototype.toNumber=function(){var t=this.words[0];return 2===this.length?t+=67108864*this.words[1]:3===this.length&&1===this.words[2]?t+=4503599627370496+67108864*this.words[1]:this.length>2&&n(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-t:t},f.prototype.toJSON=function(){return this.toString(16)},f.prototype.toBuffer=function(t,e){return n(void 0!==o),this.toArrayLike(o,t,e)},f.prototype.toArray=function(t,e){return this.toArrayLike(Array,t,e)},f.prototype.toArrayLike=function(t,e,r){var i=this.byteLength(),f=r||Math.max(1,i);n(i<=f,"byte array longer than desired length"),n(f>0,"Requested array length <= 0"),this.strip();var o,s,a="le"===e,d=new t(f),h=this.clone();if(a){for(s=0;!h.isZero();s++)o=h.andln(255),h.iushrn(8),d[s]=o;for(;s=4096&&(r+=13,e>>>=13),e>=64&&(r+=7,e>>>=7),e>=8&&(r+=4,e>>>=4),e>=2&&(r+=2,e>>>=2),r+e},f.prototype._zeroBits=function(t){if(0===t)return 26;var e=t,r=0;return 0==(8191&e)&&(r+=13,e>>>=13),0==(127&e)&&(r+=7,e>>>=7),0==(15&e)&&(r+=4,e>>>=4),0==(3&e)&&(r+=2,e>>>=2),0==(1&e)&&r++,r},f.prototype.bitLength=function(){var t=this.words[this.length-1],e=this._countBits(t);return 26*(this.length-1)+e},f.prototype.zeroBits=function(){if(this.isZero())return 0;for(var t=0,e=0;et.length?this.clone().ior(t):t.clone().ior(this)},f.prototype.uor=function(t){return this.length>t.length?this.clone().iuor(t):t.clone().iuor(this)},f.prototype.iuand=function(t){var e;e=this.length>t.length?t:this;for(var r=0;rt.length?this.clone().iand(t):t.clone().iand(this)},f.prototype.uand=function(t){return this.length>t.length?this.clone().iuand(t):t.clone().iuand(this)},f.prototype.iuxor=function(t){var e,r;this.length>t.length?(e=this,r=t):(e=t,r=this);for(var n=0;nt.length?this.clone().ixor(t):t.clone().ixor(this)},f.prototype.uxor=function(t){return this.length>t.length?this.clone().iuxor(t):t.clone().iuxor(this)},f.prototype.inotn=function(t){n("number"==typeof t&&t>=0);var e=0|Math.ceil(t/26),r=t%26;this._expand(e),r>0&&e--;for(var i=0;i0&&(this.words[i]=~this.words[i]&67108863>>26-r),this.strip()},f.prototype.notn=function(t){return this.clone().inotn(t)},f.prototype.setn=function(t,e){n("number"==typeof t&&t>=0);var r=t/26|0,i=t%26;return this._expand(r+1),this.words[r]=e?this.words[r]|1<t.length?(r=this,n=t):(r=t,n=this);for(var i=0,f=0;f>>26;for(;0!==i&&f>>26;if(this.length=r.length,0!==i)this.words[this.length]=i,this.length++;else if(r!==this)for(;ft.length?this.clone().iadd(t):t.clone().iadd(this)},f.prototype.isub=function(t){if(0!==t.negative){t.negative=0;var e=this.iadd(t);return t.negative=1,e._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(t),this.negative=1,this._normSign();var r,n,i=this.cmp(t);if(0===i)return this.negative=0,this.length=1,this.words[0]=0,this;i>0?(r=this,n=t):(r=t,n=this);for(var f=0,o=0;o>26,this.words[o]=67108863&e;for(;0!==f&&o>26,this.words[o]=67108863&e;if(0===f&&o>>13,l=0|o[1],b=8191&l,p=l>>>13,g=0|o[2],m=8191&g,y=g>>>13,v=0|o[3],w=8191&v,_=v>>>13,A=0|o[4],S=8191&A,M=A>>>13,E=0|o[5],I=8191&E,T=E>>>13,R=0|o[6],P=8191&R,L=R>>>13,O=0|o[7],x=8191&O,U=O>>>13,N=0|o[8],B=8191&N,k=N>>>13,D=0|o[9],C=8191&D,H=D>>>13,z=0|s[0],K=8191&z,q=z>>>13,F=0|s[1],Z=8191&F,j=F>>>13,G=0|s[2],$=8191&G,V=G>>>13,Y=0|s[3],X=8191&Y,W=Y>>>13,J=0|s[4],Q=8191&J,tt=J>>>13,et=0|s[5],rt=8191&et,nt=et>>>13,it=0|s[6],ft=8191&it,ot=it>>>13,st=0|s[7],at=8191&st,dt=st>>>13,ht=0|s[8],ct=8191&ht,ut=ht>>>13,lt=0|s[9],bt=8191<,pt=lt>>>13;r.negative=t.negative^e.negative,r.length=19;var gt=(d+(n=Math.imul(c,K))|0)+((8191&(i=(i=Math.imul(c,q))+Math.imul(u,K)|0))<<13)|0;d=((f=Math.imul(u,q))+(i>>>13)|0)+(gt>>>26)|0,gt&=67108863,n=Math.imul(b,K),i=(i=Math.imul(b,q))+Math.imul(p,K)|0,f=Math.imul(p,q);var mt=(d+(n=n+Math.imul(c,Z)|0)|0)+((8191&(i=(i=i+Math.imul(c,j)|0)+Math.imul(u,Z)|0))<<13)|0;d=((f=f+Math.imul(u,j)|0)+(i>>>13)|0)+(mt>>>26)|0,mt&=67108863,n=Math.imul(m,K),i=(i=Math.imul(m,q))+Math.imul(y,K)|0,f=Math.imul(y,q),n=n+Math.imul(b,Z)|0,i=(i=i+Math.imul(b,j)|0)+Math.imul(p,Z)|0,f=f+Math.imul(p,j)|0;var yt=(d+(n=n+Math.imul(c,$)|0)|0)+((8191&(i=(i=i+Math.imul(c,V)|0)+Math.imul(u,$)|0))<<13)|0;d=((f=f+Math.imul(u,V)|0)+(i>>>13)|0)+(yt>>>26)|0,yt&=67108863,n=Math.imul(w,K),i=(i=Math.imul(w,q))+Math.imul(_,K)|0,f=Math.imul(_,q),n=n+Math.imul(m,Z)|0,i=(i=i+Math.imul(m,j)|0)+Math.imul(y,Z)|0,f=f+Math.imul(y,j)|0,n=n+Math.imul(b,$)|0,i=(i=i+Math.imul(b,V)|0)+Math.imul(p,$)|0,f=f+Math.imul(p,V)|0;var vt=(d+(n=n+Math.imul(c,X)|0)|0)+((8191&(i=(i=i+Math.imul(c,W)|0)+Math.imul(u,X)|0))<<13)|0;d=((f=f+Math.imul(u,W)|0)+(i>>>13)|0)+(vt>>>26)|0,vt&=67108863,n=Math.imul(S,K),i=(i=Math.imul(S,q))+Math.imul(M,K)|0,f=Math.imul(M,q),n=n+Math.imul(w,Z)|0,i=(i=i+Math.imul(w,j)|0)+Math.imul(_,Z)|0,f=f+Math.imul(_,j)|0,n=n+Math.imul(m,$)|0,i=(i=i+Math.imul(m,V)|0)+Math.imul(y,$)|0,f=f+Math.imul(y,V)|0,n=n+Math.imul(b,X)|0,i=(i=i+Math.imul(b,W)|0)+Math.imul(p,X)|0,f=f+Math.imul(p,W)|0;var wt=(d+(n=n+Math.imul(c,Q)|0)|0)+((8191&(i=(i=i+Math.imul(c,tt)|0)+Math.imul(u,Q)|0))<<13)|0;d=((f=f+Math.imul(u,tt)|0)+(i>>>13)|0)+(wt>>>26)|0,wt&=67108863,n=Math.imul(I,K),i=(i=Math.imul(I,q))+Math.imul(T,K)|0,f=Math.imul(T,q),n=n+Math.imul(S,Z)|0,i=(i=i+Math.imul(S,j)|0)+Math.imul(M,Z)|0,f=f+Math.imul(M,j)|0,n=n+Math.imul(w,$)|0,i=(i=i+Math.imul(w,V)|0)+Math.imul(_,$)|0,f=f+Math.imul(_,V)|0,n=n+Math.imul(m,X)|0,i=(i=i+Math.imul(m,W)|0)+Math.imul(y,X)|0,f=f+Math.imul(y,W)|0,n=n+Math.imul(b,Q)|0,i=(i=i+Math.imul(b,tt)|0)+Math.imul(p,Q)|0,f=f+Math.imul(p,tt)|0;var _t=(d+(n=n+Math.imul(c,rt)|0)|0)+((8191&(i=(i=i+Math.imul(c,nt)|0)+Math.imul(u,rt)|0))<<13)|0;d=((f=f+Math.imul(u,nt)|0)+(i>>>13)|0)+(_t>>>26)|0,_t&=67108863,n=Math.imul(P,K),i=(i=Math.imul(P,q))+Math.imul(L,K)|0,f=Math.imul(L,q),n=n+Math.imul(I,Z)|0,i=(i=i+Math.imul(I,j)|0)+Math.imul(T,Z)|0,f=f+Math.imul(T,j)|0,n=n+Math.imul(S,$)|0,i=(i=i+Math.imul(S,V)|0)+Math.imul(M,$)|0,f=f+Math.imul(M,V)|0,n=n+Math.imul(w,X)|0,i=(i=i+Math.imul(w,W)|0)+Math.imul(_,X)|0,f=f+Math.imul(_,W)|0,n=n+Math.imul(m,Q)|0,i=(i=i+Math.imul(m,tt)|0)+Math.imul(y,Q)|0,f=f+Math.imul(y,tt)|0,n=n+Math.imul(b,rt)|0,i=(i=i+Math.imul(b,nt)|0)+Math.imul(p,rt)|0,f=f+Math.imul(p,nt)|0;var At=(d+(n=n+Math.imul(c,ft)|0)|0)+((8191&(i=(i=i+Math.imul(c,ot)|0)+Math.imul(u,ft)|0))<<13)|0;d=((f=f+Math.imul(u,ot)|0)+(i>>>13)|0)+(At>>>26)|0,At&=67108863,n=Math.imul(x,K),i=(i=Math.imul(x,q))+Math.imul(U,K)|0,f=Math.imul(U,q),n=n+Math.imul(P,Z)|0,i=(i=i+Math.imul(P,j)|0)+Math.imul(L,Z)|0,f=f+Math.imul(L,j)|0,n=n+Math.imul(I,$)|0,i=(i=i+Math.imul(I,V)|0)+Math.imul(T,$)|0,f=f+Math.imul(T,V)|0,n=n+Math.imul(S,X)|0,i=(i=i+Math.imul(S,W)|0)+Math.imul(M,X)|0,f=f+Math.imul(M,W)|0,n=n+Math.imul(w,Q)|0,i=(i=i+Math.imul(w,tt)|0)+Math.imul(_,Q)|0,f=f+Math.imul(_,tt)|0,n=n+Math.imul(m,rt)|0,i=(i=i+Math.imul(m,nt)|0)+Math.imul(y,rt)|0,f=f+Math.imul(y,nt)|0,n=n+Math.imul(b,ft)|0,i=(i=i+Math.imul(b,ot)|0)+Math.imul(p,ft)|0,f=f+Math.imul(p,ot)|0;var St=(d+(n=n+Math.imul(c,at)|0)|0)+((8191&(i=(i=i+Math.imul(c,dt)|0)+Math.imul(u,at)|0))<<13)|0;d=((f=f+Math.imul(u,dt)|0)+(i>>>13)|0)+(St>>>26)|0,St&=67108863,n=Math.imul(B,K),i=(i=Math.imul(B,q))+Math.imul(k,K)|0,f=Math.imul(k,q),n=n+Math.imul(x,Z)|0,i=(i=i+Math.imul(x,j)|0)+Math.imul(U,Z)|0,f=f+Math.imul(U,j)|0,n=n+Math.imul(P,$)|0,i=(i=i+Math.imul(P,V)|0)+Math.imul(L,$)|0,f=f+Math.imul(L,V)|0,n=n+Math.imul(I,X)|0,i=(i=i+Math.imul(I,W)|0)+Math.imul(T,X)|0,f=f+Math.imul(T,W)|0,n=n+Math.imul(S,Q)|0,i=(i=i+Math.imul(S,tt)|0)+Math.imul(M,Q)|0,f=f+Math.imul(M,tt)|0,n=n+Math.imul(w,rt)|0,i=(i=i+Math.imul(w,nt)|0)+Math.imul(_,rt)|0,f=f+Math.imul(_,nt)|0,n=n+Math.imul(m,ft)|0,i=(i=i+Math.imul(m,ot)|0)+Math.imul(y,ft)|0,f=f+Math.imul(y,ot)|0,n=n+Math.imul(b,at)|0,i=(i=i+Math.imul(b,dt)|0)+Math.imul(p,at)|0,f=f+Math.imul(p,dt)|0;var Mt=(d+(n=n+Math.imul(c,ct)|0)|0)+((8191&(i=(i=i+Math.imul(c,ut)|0)+Math.imul(u,ct)|0))<<13)|0;d=((f=f+Math.imul(u,ut)|0)+(i>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,n=Math.imul(C,K),i=(i=Math.imul(C,q))+Math.imul(H,K)|0,f=Math.imul(H,q),n=n+Math.imul(B,Z)|0,i=(i=i+Math.imul(B,j)|0)+Math.imul(k,Z)|0,f=f+Math.imul(k,j)|0,n=n+Math.imul(x,$)|0,i=(i=i+Math.imul(x,V)|0)+Math.imul(U,$)|0,f=f+Math.imul(U,V)|0,n=n+Math.imul(P,X)|0,i=(i=i+Math.imul(P,W)|0)+Math.imul(L,X)|0,f=f+Math.imul(L,W)|0,n=n+Math.imul(I,Q)|0,i=(i=i+Math.imul(I,tt)|0)+Math.imul(T,Q)|0,f=f+Math.imul(T,tt)|0,n=n+Math.imul(S,rt)|0,i=(i=i+Math.imul(S,nt)|0)+Math.imul(M,rt)|0,f=f+Math.imul(M,nt)|0,n=n+Math.imul(w,ft)|0,i=(i=i+Math.imul(w,ot)|0)+Math.imul(_,ft)|0,f=f+Math.imul(_,ot)|0,n=n+Math.imul(m,at)|0,i=(i=i+Math.imul(m,dt)|0)+Math.imul(y,at)|0,f=f+Math.imul(y,dt)|0,n=n+Math.imul(b,ct)|0,i=(i=i+Math.imul(b,ut)|0)+Math.imul(p,ct)|0,f=f+Math.imul(p,ut)|0;var Et=(d+(n=n+Math.imul(c,bt)|0)|0)+((8191&(i=(i=i+Math.imul(c,pt)|0)+Math.imul(u,bt)|0))<<13)|0;d=((f=f+Math.imul(u,pt)|0)+(i>>>13)|0)+(Et>>>26)|0,Et&=67108863,n=Math.imul(C,Z),i=(i=Math.imul(C,j))+Math.imul(H,Z)|0,f=Math.imul(H,j),n=n+Math.imul(B,$)|0,i=(i=i+Math.imul(B,V)|0)+Math.imul(k,$)|0,f=f+Math.imul(k,V)|0,n=n+Math.imul(x,X)|0,i=(i=i+Math.imul(x,W)|0)+Math.imul(U,X)|0,f=f+Math.imul(U,W)|0,n=n+Math.imul(P,Q)|0,i=(i=i+Math.imul(P,tt)|0)+Math.imul(L,Q)|0,f=f+Math.imul(L,tt)|0,n=n+Math.imul(I,rt)|0,i=(i=i+Math.imul(I,nt)|0)+Math.imul(T,rt)|0,f=f+Math.imul(T,nt)|0,n=n+Math.imul(S,ft)|0,i=(i=i+Math.imul(S,ot)|0)+Math.imul(M,ft)|0,f=f+Math.imul(M,ot)|0,n=n+Math.imul(w,at)|0,i=(i=i+Math.imul(w,dt)|0)+Math.imul(_,at)|0,f=f+Math.imul(_,dt)|0,n=n+Math.imul(m,ct)|0,i=(i=i+Math.imul(m,ut)|0)+Math.imul(y,ct)|0,f=f+Math.imul(y,ut)|0;var It=(d+(n=n+Math.imul(b,bt)|0)|0)+((8191&(i=(i=i+Math.imul(b,pt)|0)+Math.imul(p,bt)|0))<<13)|0;d=((f=f+Math.imul(p,pt)|0)+(i>>>13)|0)+(It>>>26)|0,It&=67108863,n=Math.imul(C,$),i=(i=Math.imul(C,V))+Math.imul(H,$)|0,f=Math.imul(H,V),n=n+Math.imul(B,X)|0,i=(i=i+Math.imul(B,W)|0)+Math.imul(k,X)|0,f=f+Math.imul(k,W)|0,n=n+Math.imul(x,Q)|0,i=(i=i+Math.imul(x,tt)|0)+Math.imul(U,Q)|0,f=f+Math.imul(U,tt)|0,n=n+Math.imul(P,rt)|0,i=(i=i+Math.imul(P,nt)|0)+Math.imul(L,rt)|0,f=f+Math.imul(L,nt)|0,n=n+Math.imul(I,ft)|0,i=(i=i+Math.imul(I,ot)|0)+Math.imul(T,ft)|0,f=f+Math.imul(T,ot)|0,n=n+Math.imul(S,at)|0,i=(i=i+Math.imul(S,dt)|0)+Math.imul(M,at)|0,f=f+Math.imul(M,dt)|0,n=n+Math.imul(w,ct)|0,i=(i=i+Math.imul(w,ut)|0)+Math.imul(_,ct)|0,f=f+Math.imul(_,ut)|0;var Tt=(d+(n=n+Math.imul(m,bt)|0)|0)+((8191&(i=(i=i+Math.imul(m,pt)|0)+Math.imul(y,bt)|0))<<13)|0;d=((f=f+Math.imul(y,pt)|0)+(i>>>13)|0)+(Tt>>>26)|0,Tt&=67108863,n=Math.imul(C,X),i=(i=Math.imul(C,W))+Math.imul(H,X)|0,f=Math.imul(H,W),n=n+Math.imul(B,Q)|0,i=(i=i+Math.imul(B,tt)|0)+Math.imul(k,Q)|0,f=f+Math.imul(k,tt)|0,n=n+Math.imul(x,rt)|0,i=(i=i+Math.imul(x,nt)|0)+Math.imul(U,rt)|0,f=f+Math.imul(U,nt)|0,n=n+Math.imul(P,ft)|0,i=(i=i+Math.imul(P,ot)|0)+Math.imul(L,ft)|0,f=f+Math.imul(L,ot)|0,n=n+Math.imul(I,at)|0,i=(i=i+Math.imul(I,dt)|0)+Math.imul(T,at)|0,f=f+Math.imul(T,dt)|0,n=n+Math.imul(S,ct)|0,i=(i=i+Math.imul(S,ut)|0)+Math.imul(M,ct)|0,f=f+Math.imul(M,ut)|0;var Rt=(d+(n=n+Math.imul(w,bt)|0)|0)+((8191&(i=(i=i+Math.imul(w,pt)|0)+Math.imul(_,bt)|0))<<13)|0;d=((f=f+Math.imul(_,pt)|0)+(i>>>13)|0)+(Rt>>>26)|0,Rt&=67108863,n=Math.imul(C,Q),i=(i=Math.imul(C,tt))+Math.imul(H,Q)|0,f=Math.imul(H,tt),n=n+Math.imul(B,rt)|0,i=(i=i+Math.imul(B,nt)|0)+Math.imul(k,rt)|0,f=f+Math.imul(k,nt)|0,n=n+Math.imul(x,ft)|0,i=(i=i+Math.imul(x,ot)|0)+Math.imul(U,ft)|0,f=f+Math.imul(U,ot)|0,n=n+Math.imul(P,at)|0,i=(i=i+Math.imul(P,dt)|0)+Math.imul(L,at)|0,f=f+Math.imul(L,dt)|0,n=n+Math.imul(I,ct)|0,i=(i=i+Math.imul(I,ut)|0)+Math.imul(T,ct)|0,f=f+Math.imul(T,ut)|0;var Pt=(d+(n=n+Math.imul(S,bt)|0)|0)+((8191&(i=(i=i+Math.imul(S,pt)|0)+Math.imul(M,bt)|0))<<13)|0;d=((f=f+Math.imul(M,pt)|0)+(i>>>13)|0)+(Pt>>>26)|0,Pt&=67108863,n=Math.imul(C,rt),i=(i=Math.imul(C,nt))+Math.imul(H,rt)|0,f=Math.imul(H,nt),n=n+Math.imul(B,ft)|0,i=(i=i+Math.imul(B,ot)|0)+Math.imul(k,ft)|0,f=f+Math.imul(k,ot)|0,n=n+Math.imul(x,at)|0,i=(i=i+Math.imul(x,dt)|0)+Math.imul(U,at)|0,f=f+Math.imul(U,dt)|0,n=n+Math.imul(P,ct)|0,i=(i=i+Math.imul(P,ut)|0)+Math.imul(L,ct)|0,f=f+Math.imul(L,ut)|0;var Lt=(d+(n=n+Math.imul(I,bt)|0)|0)+((8191&(i=(i=i+Math.imul(I,pt)|0)+Math.imul(T,bt)|0))<<13)|0;d=((f=f+Math.imul(T,pt)|0)+(i>>>13)|0)+(Lt>>>26)|0,Lt&=67108863,n=Math.imul(C,ft),i=(i=Math.imul(C,ot))+Math.imul(H,ft)|0,f=Math.imul(H,ot),n=n+Math.imul(B,at)|0,i=(i=i+Math.imul(B,dt)|0)+Math.imul(k,at)|0,f=f+Math.imul(k,dt)|0,n=n+Math.imul(x,ct)|0,i=(i=i+Math.imul(x,ut)|0)+Math.imul(U,ct)|0,f=f+Math.imul(U,ut)|0;var Ot=(d+(n=n+Math.imul(P,bt)|0)|0)+((8191&(i=(i=i+Math.imul(P,pt)|0)+Math.imul(L,bt)|0))<<13)|0;d=((f=f+Math.imul(L,pt)|0)+(i>>>13)|0)+(Ot>>>26)|0,Ot&=67108863,n=Math.imul(C,at),i=(i=Math.imul(C,dt))+Math.imul(H,at)|0,f=Math.imul(H,dt),n=n+Math.imul(B,ct)|0,i=(i=i+Math.imul(B,ut)|0)+Math.imul(k,ct)|0,f=f+Math.imul(k,ut)|0;var xt=(d+(n=n+Math.imul(x,bt)|0)|0)+((8191&(i=(i=i+Math.imul(x,pt)|0)+Math.imul(U,bt)|0))<<13)|0;d=((f=f+Math.imul(U,pt)|0)+(i>>>13)|0)+(xt>>>26)|0,xt&=67108863,n=Math.imul(C,ct),i=(i=Math.imul(C,ut))+Math.imul(H,ct)|0,f=Math.imul(H,ut);var Ut=(d+(n=n+Math.imul(B,bt)|0)|0)+((8191&(i=(i=i+Math.imul(B,pt)|0)+Math.imul(k,bt)|0))<<13)|0;d=((f=f+Math.imul(k,pt)|0)+(i>>>13)|0)+(Ut>>>26)|0,Ut&=67108863;var Nt=(d+(n=Math.imul(C,bt))|0)+((8191&(i=(i=Math.imul(C,pt))+Math.imul(H,bt)|0))<<13)|0;return d=((f=Math.imul(H,pt))+(i>>>13)|0)+(Nt>>>26)|0,Nt&=67108863,a[0]=gt,a[1]=mt,a[2]=yt,a[3]=vt,a[4]=wt,a[5]=_t,a[6]=At,a[7]=St,a[8]=Mt,a[9]=Et,a[10]=It,a[11]=Tt,a[12]=Rt,a[13]=Pt,a[14]=Lt,a[15]=Ot,a[16]=xt,a[17]=Ut,a[18]=Nt,0!==d&&(a[19]=d,r.length++),r};function p(t,e,r){return(new g).mulp(t,e,r)}function g(t,e){this.x=t,this.y=e}Math.imul||(b=l),f.prototype.mulTo=function(t,e){var r,n=this.length+t.length;return r=10===this.length&&10===t.length?b(this,t,e):n<63?l(this,t,e):n<1024?function(t,e,r){r.negative=e.negative^t.negative,r.length=t.length+e.length;for(var n=0,i=0,f=0;f>>26)|0)>>>26,o&=67108863}r.words[f]=s,n=o,o=i}return 0!==n?r.words[f]=n:r.length--,r.strip()}(this,t,e):p(this,t,e),r},g.prototype.makeRBT=function(t){for(var e=new Array(t),r=f.prototype._countBits(t)-1,n=0;n>=1;return n},g.prototype.permute=function(t,e,r,n,i,f){for(var o=0;o>>=1)i++;return 1<>>=13,r[2*o+1]=8191&f,f>>>=13;for(o=2*e;o>=26,e+=i/67108864|0,e+=f>>>26,this.words[r]=67108863&f}return 0!==e&&(this.words[r]=e,this.length++),this},f.prototype.muln=function(t){return this.clone().imuln(t)},f.prototype.sqr=function(){return this.mul(this)},f.prototype.isqr=function(){return this.imul(this.clone())},f.prototype.pow=function(t){var e=function(t){for(var e=new Array(t.bitLength()),r=0;r>>i}return e}(t);if(0===e.length)return new f(1);for(var r=this,n=0;n=0);var e,r=t%26,i=(t-r)/26,f=67108863>>>26-r<<26-r;if(0!==r){var o=0;for(e=0;e>>26-r}o&&(this.words[e]=o,this.length++)}if(0!==i){for(e=this.length-1;e>=0;e--)this.words[e+i]=this.words[e];for(e=0;e=0),i=e?(e-e%26)/26:0;var f=t%26,o=Math.min((t-f)/26,this.length),s=67108863^67108863>>>f<o)for(this.length-=o,d=0;d=0&&(0!==h||d>=i);d--){var c=0|this.words[d];this.words[d]=h<<26-f|c>>>f,h=c&s}return a&&0!==h&&(a.words[a.length++]=h),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},f.prototype.ishrn=function(t,e,r){return n(0===this.negative),this.iushrn(t,e,r)},f.prototype.shln=function(t){return this.clone().ishln(t)},f.prototype.ushln=function(t){return this.clone().iushln(t)},f.prototype.shrn=function(t){return this.clone().ishrn(t)},f.prototype.ushrn=function(t){return this.clone().iushrn(t)},f.prototype.testn=function(t){n("number"==typeof t&&t>=0);var e=t%26,r=(t-e)/26,i=1<=0);var e=t%26,r=(t-e)/26;if(n(0===this.negative,"imaskn works only with positive numbers"),this.length<=r)return this;if(0!==e&&r++,this.length=Math.min(r,this.length),0!==e){var i=67108863^67108863>>>e<=67108864;e++)this.words[e]-=67108864,e===this.length-1?this.words[e+1]=1:this.words[e+1]++;return this.length=Math.max(this.length,e+1),this},f.prototype.isubn=function(t){if(n("number"==typeof t),n(t<67108864),t<0)return this.iaddn(-t);if(0!==this.negative)return this.negative=0,this.iaddn(t),this.negative=1,this;if(this.words[0]-=t,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var e=0;e>26)-(a/67108864|0),this.words[i+r]=67108863&f}for(;i>26,this.words[i+r]=67108863&f;if(0===s)return this.strip();for(n(-1===s),s=0,i=0;i>26,this.words[i]=67108863&f;return this.negative=1,this.strip()},f.prototype._wordDiv=function(t,e){var r=(this.length,t.length),n=this.clone(),i=t,o=0|i.words[i.length-1];0!=(r=26-this._countBits(o))&&(i=i.ushln(r),n.iushln(r),o=0|i.words[i.length-1]);var s,a=n.length-i.length;if("mod"!==e){(s=new f(null)).length=a+1,s.words=new Array(s.length);for(var d=0;d=0;c--){var u=67108864*(0|n.words[i.length+c])+(0|n.words[i.length+c-1]);for(u=Math.min(u/o|0,67108863),n._ishlnsubmul(i,u,c);0!==n.negative;)u--,n.negative=0,n._ishlnsubmul(i,1,c),n.isZero()||(n.negative^=1);s&&(s.words[c]=u)}return s&&s.strip(),n.strip(),"div"!==e&&0!==r&&n.iushrn(r),{div:s||null,mod:n}},f.prototype.divmod=function(t,e,r){return n(!t.isZero()),this.isZero()?{div:new f(0),mod:new f(0)}:0!==this.negative&&0===t.negative?(s=this.neg().divmod(t,e),"mod"!==e&&(i=s.div.neg()),"div"!==e&&(o=s.mod.neg(),r&&0!==o.negative&&o.iadd(t)),{div:i,mod:o}):0===this.negative&&0!==t.negative?(s=this.divmod(t.neg(),e),"mod"!==e&&(i=s.div.neg()),{div:i,mod:s.mod}):0!=(this.negative&t.negative)?(s=this.neg().divmod(t.neg(),e),"div"!==e&&(o=s.mod.neg(),r&&0!==o.negative&&o.isub(t)),{div:s.div,mod:o}):t.length>this.length||this.cmp(t)<0?{div:new f(0),mod:this}:1===t.length?"div"===e?{div:this.divn(t.words[0]),mod:null}:"mod"===e?{div:null,mod:new f(this.modn(t.words[0]))}:{div:this.divn(t.words[0]),mod:new f(this.modn(t.words[0]))}:this._wordDiv(t,e);var i,o,s},f.prototype.div=function(t){return this.divmod(t,"div",!1).div},f.prototype.mod=function(t){return this.divmod(t,"mod",!1).mod},f.prototype.umod=function(t){return this.divmod(t,"mod",!0).mod},f.prototype.divRound=function(t){var e=this.divmod(t);if(e.mod.isZero())return e.div;var r=0!==e.div.negative?e.mod.isub(t):e.mod,n=t.ushrn(1),i=t.andln(1),f=r.cmp(n);return f<0||1===i&&0===f?e.div:0!==e.div.negative?e.div.isubn(1):e.div.iaddn(1)},f.prototype.modn=function(t){n(t<=67108863);for(var e=(1<<26)%t,r=0,i=this.length-1;i>=0;i--)r=(e*r+(0|this.words[i]))%t;return r},f.prototype.idivn=function(t){n(t<=67108863);for(var e=0,r=this.length-1;r>=0;r--){var i=(0|this.words[r])+67108864*e;this.words[r]=i/t|0,e=i%t}return this.strip()},f.prototype.divn=function(t){return this.clone().idivn(t)},f.prototype.egcd=function(t){n(0===t.negative),n(!t.isZero());var e=this,r=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var i=new f(1),o=new f(0),s=new f(0),a=new f(1),d=0;e.isEven()&&r.isEven();)e.iushrn(1),r.iushrn(1),++d;for(var h=r.clone(),c=e.clone();!e.isZero();){for(var u=0,l=1;0==(e.words[0]&l)&&u<26;++u,l<<=1);if(u>0)for(e.iushrn(u);u-- >0;)(i.isOdd()||o.isOdd())&&(i.iadd(h),o.isub(c)),i.iushrn(1),o.iushrn(1);for(var b=0,p=1;0==(r.words[0]&p)&&b<26;++b,p<<=1);if(b>0)for(r.iushrn(b);b-- >0;)(s.isOdd()||a.isOdd())&&(s.iadd(h),a.isub(c)),s.iushrn(1),a.iushrn(1);e.cmp(r)>=0?(e.isub(r),i.isub(s),o.isub(a)):(r.isub(e),s.isub(i),a.isub(o))}return{a:s,b:a,gcd:r.iushln(d)}},f.prototype._invmp=function(t){n(0===t.negative),n(!t.isZero());var e=this,r=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var i,o=new f(1),s=new f(0),a=r.clone();e.cmpn(1)>0&&r.cmpn(1)>0;){for(var d=0,h=1;0==(e.words[0]&h)&&d<26;++d,h<<=1);if(d>0)for(e.iushrn(d);d-- >0;)o.isOdd()&&o.iadd(a),o.iushrn(1);for(var c=0,u=1;0==(r.words[0]&u)&&c<26;++c,u<<=1);if(c>0)for(r.iushrn(c);c-- >0;)s.isOdd()&&s.iadd(a),s.iushrn(1);e.cmp(r)>=0?(e.isub(r),o.isub(s)):(r.isub(e),s.isub(o))}return(i=0===e.cmpn(1)?o:s).cmpn(0)<0&&i.iadd(t),i},f.prototype.gcd=function(t){if(this.isZero())return t.abs();if(t.isZero())return this.abs();var e=this.clone(),r=t.clone();e.negative=0,r.negative=0;for(var n=0;e.isEven()&&r.isEven();n++)e.iushrn(1),r.iushrn(1);for(;;){for(;e.isEven();)e.iushrn(1);for(;r.isEven();)r.iushrn(1);var i=e.cmp(r);if(i<0){var f=e;e=r,r=f}else if(0===i||0===r.cmpn(1))break;e.isub(r)}return r.iushln(n)},f.prototype.invm=function(t){return this.egcd(t).a.umod(t)},f.prototype.isEven=function(){return 0==(1&this.words[0])},f.prototype.isOdd=function(){return 1==(1&this.words[0])},f.prototype.andln=function(t){return this.words[0]&t},f.prototype.bincn=function(t){n("number"==typeof t);var e=t%26,r=(t-e)/26,i=1<>>26,s&=67108863,this.words[o]=s}return 0!==f&&(this.words[o]=f,this.length++),this},f.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},f.prototype.cmpn=function(t){var e,r=t<0;if(0!==this.negative&&!r)return-1;if(0===this.negative&&r)return 1;if(this.strip(),this.length>1)e=1;else{r&&(t=-t),n(t<=67108863,"Number is too big");var i=0|this.words[0];e=i===t?0:it.length)return 1;if(this.length=0;r--){var n=0|this.words[r],i=0|t.words[r];if(n!==i){ni&&(e=1);break}}return e},f.prototype.gtn=function(t){return 1===this.cmpn(t)},f.prototype.gt=function(t){return 1===this.cmp(t)},f.prototype.gten=function(t){return this.cmpn(t)>=0},f.prototype.gte=function(t){return this.cmp(t)>=0},f.prototype.ltn=function(t){return-1===this.cmpn(t)},f.prototype.lt=function(t){return-1===this.cmp(t)},f.prototype.lten=function(t){return this.cmpn(t)<=0},f.prototype.lte=function(t){return this.cmp(t)<=0},f.prototype.eqn=function(t){return 0===this.cmpn(t)},f.prototype.eq=function(t){return 0===this.cmp(t)},f.red=function(t){return new S(t)},f.prototype.toRed=function(t){return n(!this.red,"Already a number in reduction context"),n(0===this.negative,"red works only with positives"),t.convertTo(this)._forceRed(t)},f.prototype.fromRed=function(){return n(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},f.prototype._forceRed=function(t){return this.red=t,this},f.prototype.forceRed=function(t){return n(!this.red,"Already a number in reduction context"),this._forceRed(t)},f.prototype.redAdd=function(t){return n(this.red,"redAdd works only with red numbers"),this.red.add(this,t)},f.prototype.redIAdd=function(t){return n(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,t)},f.prototype.redSub=function(t){return n(this.red,"redSub works only with red numbers"),this.red.sub(this,t)},f.prototype.redISub=function(t){return n(this.red,"redISub works only with red numbers"),this.red.isub(this,t)},f.prototype.redShl=function(t){return n(this.red,"redShl works only with red numbers"),this.red.shl(this,t)},f.prototype.redMul=function(t){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.mul(this,t)},f.prototype.redIMul=function(t){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.imul(this,t)},f.prototype.redSqr=function(){return n(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},f.prototype.redISqr=function(){return n(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},f.prototype.redSqrt=function(){return n(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},f.prototype.redInvm=function(){return n(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},f.prototype.redNeg=function(){return n(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},f.prototype.redPow=function(t){return n(this.red&&!t.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,t)};var m={k256:null,p224:null,p192:null,p25519:null};function y(t,e){this.name=t,this.p=new f(e,16),this.n=this.p.bitLength(),this.k=new f(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function v(){y.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function w(){y.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function _(){y.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function A(){y.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function S(t){if("string"==typeof t){var e=f._prime(t);this.m=e.p,this.prime=e}else n(t.gtn(1),"modulus must be greater than 1"),this.m=t,this.prime=null}function M(t){S.call(this,t),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new f(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}y.prototype._tmp=function(){var t=new f(null);return t.words=new Array(Math.ceil(this.n/13)),t},y.prototype.ireduce=function(t){var e,r=t;do{this.split(r,this.tmp),e=(r=(r=this.imulK(r)).iadd(this.tmp)).bitLength()}while(e>this.n);var n=e0?r.isub(this.p):void 0!==r.strip?r.strip():r._strip(),r},y.prototype.split=function(t,e){t.iushrn(this.n,0,e)},y.prototype.imulK=function(t){return t.imul(this.k)},i(v,y),v.prototype.split=function(t,e){for(var r=4194303,n=Math.min(t.length,9),i=0;i>>22,f=o}f>>>=22,t.words[i-10]=f,0===f&&t.length>10?t.length-=10:t.length-=9},v.prototype.imulK=function(t){t.words[t.length]=0,t.words[t.length+1]=0,t.length+=2;for(var e=0,r=0;r>>=26,t.words[r]=i,e=n}return 0!==e&&(t.words[t.length++]=e),t},f._prime=function(t){if(m[t])return m[t];var e;if("k256"===t)e=new v;else if("p224"===t)e=new w;else if("p192"===t)e=new _;else{if("p25519"!==t)throw new Error("Unknown prime "+t);e=new A}return m[t]=e,e},S.prototype._verify1=function(t){n(0===t.negative,"red works only with positives"),n(t.red,"red works only with red numbers")},S.prototype._verify2=function(t,e){n(0==(t.negative|e.negative),"red works only with positives"),n(t.red&&t.red===e.red,"red works only with red numbers")},S.prototype.imod=function(t){return this.prime?this.prime.ireduce(t)._forceRed(this):t.umod(this.m)._forceRed(this)},S.prototype.neg=function(t){return t.isZero()?t.clone():this.m.sub(t)._forceRed(this)},S.prototype.add=function(t,e){this._verify2(t,e);var r=t.add(e);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},S.prototype.iadd=function(t,e){this._verify2(t,e);var r=t.iadd(e);return r.cmp(this.m)>=0&&r.isub(this.m),r},S.prototype.sub=function(t,e){this._verify2(t,e);var r=t.sub(e);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},S.prototype.isub=function(t,e){this._verify2(t,e);var r=t.isub(e);return r.cmpn(0)<0&&r.iadd(this.m),r},S.prototype.shl=function(t,e){return this._verify1(t),this.imod(t.ushln(e))},S.prototype.imul=function(t,e){return this._verify2(t,e),this.imod(t.imul(e))},S.prototype.mul=function(t,e){return this._verify2(t,e),this.imod(t.mul(e))},S.prototype.isqr=function(t){return this.imul(t,t.clone())},S.prototype.sqr=function(t){return this.mul(t,t)},S.prototype.sqrt=function(t){if(t.isZero())return t.clone();var e=this.m.andln(3);if(n(e%2==1),3===e){var r=this.m.add(new f(1)).iushrn(2);return this.pow(t,r)}for(var i=this.m.subn(1),o=0;!i.isZero()&&0===i.andln(1);)o++,i.iushrn(1);n(!i.isZero());var s=new f(1).toRed(this),a=s.redNeg(),d=this.m.subn(1).iushrn(1),h=this.m.bitLength();for(h=new f(2*h*h).toRed(this);0!==this.pow(h,d).cmp(a);)h.redIAdd(a);for(var c=this.pow(h,i),u=this.pow(t,i.addn(1).iushrn(1)),l=this.pow(t,i),b=o;0!==l.cmp(s);){for(var p=l,g=0;0!==p.cmp(s);g++)p=p.redSqr();n(g=0;n--){for(var d=e.words[n],h=a-1;h>=0;h--){var c=d>>h&1;i!==r[0]&&(i=this.sqr(i)),0!==c||0!==o?(o<<=1,o|=c,(4==++s||0===n&&0===h)&&(i=this.mul(i,r[o]),s=0,o=0)):s=0}a=26}return i},S.prototype.convertTo=function(t){var e=t.umod(this.m);return e===t?e.clone():e},S.prototype.convertFrom=function(t){var e=t.clone();return e.red=null,e},f.mont=function(t){return new M(t)},i(M,S),M.prototype.convertTo=function(t){return this.imod(t.ushln(this.shift))},M.prototype.convertFrom=function(t){var e=this.imod(t.mul(this.rinv));return e.red=null,e},M.prototype.imul=function(t,e){if(t.isZero()||e.isZero())return t.words[0]=0,t.length=1,t;var r=t.imul(e),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),f=i;return i.cmp(this.m)>=0?f=i.isub(this.m):i.cmpn(0)<0&&(f=i.iadd(this.m)),f._forceRed(this)},M.prototype.mul=function(t,e){if(t.isZero()||e.isZero())return new f(0)._forceRed(this);var r=t.mul(e),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),o=i;return i.cmp(this.m)>=0?o=i.isub(this.m):i.cmpn(0)<0&&(o=i.iadd(this.m)),o._forceRed(this)},M.prototype.invm=function(t){return this.imod(t._invmp(this.m).mul(this.r2))._forceRed(this)}}(t=r.nmd(t),this)},2745:(t,e,r)=>{var n;function i(t){this.rand=t}if(t.exports=function(t){return n||(n=new i(null)),n.generate(t)},t.exports.Rand=i,i.prototype.generate=function(t){return this._rand(t)},i.prototype._rand=function(t){if(this.rand.getBytes)return this.rand.getBytes(t);for(var e=new Uint8Array(t),r=0;r{const n=r(8166);t.exports=n("123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz")},8616:(t,e,r)=>{"use strict";var n=r(7022);t.exports=function(t){function e(e){var r=e.slice(0,-4),n=e.slice(-4),i=t(r);if(!(n[0]^i[0]|n[1]^i[1]|n[2]^i[2]|n[3]^i[3]))return r}return{encode:function(e){var r=Uint8Array.from(e),i=t(r),f=r.length+4,o=new Uint8Array(f);return o.set(r,0),o.set(i.subarray(0,4),r.length),n.encode(o,f)},decode:function(t){var r=e(n.decode(t));if(!r)throw new Error("Invalid checksum");return r},decodeUnsafe:function(t){var r=n.decodeUnsafe(t);if(r)return e(r)}}}},4075:(t,e,r)=>{"use strict";var{sha256:n}=r(6053),i=r(8616);t.exports=i((function(t){return n(n(t))}))},8834:(t,e,r)=>{"use strict";const n=r(5766),i=r(2333),f="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;e.lW=a,e.h2=50;const o=2147483647;function s(t){if(t>o)throw new RangeError('The value "'+t+'" is invalid for option "size"');const e=new Uint8Array(t);return Object.setPrototypeOf(e,a.prototype),e}function a(t,e,r){if("number"==typeof t){if("string"==typeof e)throw new TypeError('The "string" argument must be of type string. Received type number');return c(t)}return d(t,e,r)}function d(t,e,r){if("string"==typeof t)return function(t,e){if("string"==typeof e&&""!==e||(e="utf8"),!a.isEncoding(e))throw new TypeError("Unknown encoding: "+e);const r=0|p(t,e);let n=s(r);const i=n.write(t,e);return i!==r&&(n=n.slice(0,i)),n}(t,e);if(ArrayBuffer.isView(t))return function(t){if(Y(t,Uint8Array)){const e=new Uint8Array(t);return l(e.buffer,e.byteOffset,e.byteLength)}return u(t)}(t);if(null==t)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t);if(Y(t,ArrayBuffer)||t&&Y(t.buffer,ArrayBuffer))return l(t,e,r);if("undefined"!=typeof SharedArrayBuffer&&(Y(t,SharedArrayBuffer)||t&&Y(t.buffer,SharedArrayBuffer)))return l(t,e,r);if("number"==typeof t)throw new TypeError('The "value" argument must not be of type number. Received type number');const n=t.valueOf&&t.valueOf();if(null!=n&&n!==t)return a.from(n,e,r);const i=function(t){if(a.isBuffer(t)){const e=0|b(t.length),r=s(e);return 0===r.length||t.copy(r,0,0,e),r}return void 0!==t.length?"number"!=typeof t.length||X(t.length)?s(0):u(t):"Buffer"===t.type&&Array.isArray(t.data)?u(t.data):void 0}(t);if(i)return i;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof t[Symbol.toPrimitive])return a.from(t[Symbol.toPrimitive]("string"),e,r);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t)}function h(t){if("number"!=typeof t)throw new TypeError('"size" argument must be of type number');if(t<0)throw new RangeError('The value "'+t+'" is invalid for option "size"')}function c(t){return h(t),s(t<0?0:0|b(t))}function u(t){const e=t.length<0?0:0|b(t.length),r=s(e);for(let n=0;n=o)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+o.toString(16)+" bytes");return 0|t}function p(t,e){if(a.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||Y(t,ArrayBuffer))return t.byteLength;if("string"!=typeof t)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof t);const r=t.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;let i=!1;for(;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return G(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return $(t).length;default:if(i)return n?-1:G(t).length;e=(""+e).toLowerCase(),i=!0}}function g(t,e,r){let n=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return L(this,e,r);case"utf8":case"utf-8":return I(this,e,r);case"ascii":return R(this,e,r);case"latin1":case"binary":return P(this,e,r);case"base64":return E(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return O(this,e,r);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function m(t,e,r){const n=t[e];t[e]=t[r],t[r]=n}function y(t,e,r,n,i){if(0===t.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),X(r=+r)&&(r=i?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(i)return-1;r=t.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof e&&(e=a.from(e,n)),a.isBuffer(e))return 0===e.length?-1:v(t,e,r,n,i);if("number"==typeof e)return e&=255,"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):v(t,[e],r,n,i);throw new TypeError("val must be string, number or Buffer")}function v(t,e,r,n,i){let f,o=1,s=t.length,a=e.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;o=2,s/=2,a/=2,r/=2}function d(t,e){return 1===o?t[e]:t.readUInt16BE(e*o)}if(i){let n=-1;for(f=r;fs&&(r=s-a),f=r;f>=0;f--){let r=!0;for(let n=0;ni&&(n=i):n=i;const f=e.length;let o;for(n>f/2&&(n=f/2),o=0;o>8,i=r%256,f.push(i),f.push(n);return f}(e,t.length-r),t,r,n)}function E(t,e,r){return 0===e&&r===t.length?n.fromByteArray(t):n.fromByteArray(t.slice(e,r))}function I(t,e,r){r=Math.min(t.length,r);const n=[];let i=e;for(;i239?4:e>223?3:e>191?2:1;if(i+o<=r){let r,n,s,a;switch(o){case 1:e<128&&(f=e);break;case 2:r=t[i+1],128==(192&r)&&(a=(31&e)<<6|63&r,a>127&&(f=a));break;case 3:r=t[i+1],n=t[i+2],128==(192&r)&&128==(192&n)&&(a=(15&e)<<12|(63&r)<<6|63&n,a>2047&&(a<55296||a>57343)&&(f=a));break;case 4:r=t[i+1],n=t[i+2],s=t[i+3],128==(192&r)&&128==(192&n)&&128==(192&s)&&(a=(15&e)<<18|(63&r)<<12|(63&n)<<6|63&s,a>65535&&a<1114112&&(f=a))}}null===f?(f=65533,o=1):f>65535&&(f-=65536,n.push(f>>>10&1023|55296),f=56320|1023&f),n.push(f),i+=o}return function(t){const e=t.length;if(e<=T)return String.fromCharCode.apply(String,t);let r="",n=0;for(;nn.length?(a.isBuffer(e)||(e=a.from(e)),e.copy(n,i)):Uint8Array.prototype.set.call(n,e,i);else{if(!a.isBuffer(e))throw new TypeError('"list" argument must be an Array of Buffers');e.copy(n,i)}i+=e.length}return n},a.byteLength=p,a.prototype._isBuffer=!0,a.prototype.swap16=function(){const t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let e=0;er&&(t+=" ... "),""},f&&(a.prototype[f]=a.prototype.inspect),a.prototype.compare=function(t,e,r,n,i){if(Y(t,Uint8Array)&&(t=a.from(t,t.offset,t.byteLength)),!a.isBuffer(t))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof t);if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),e<0||r>t.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&e>=r)return 0;if(n>=i)return-1;if(e>=r)return 1;if(this===t)return 0;let f=(i>>>=0)-(n>>>=0),o=(r>>>=0)-(e>>>=0);const s=Math.min(f,o),d=this.slice(n,i),h=t.slice(e,r);for(let t=0;t>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}const i=this.length-e;if((void 0===r||r>i)&&(r=i),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");let f=!1;for(;;)switch(n){case"hex":return w(this,t,e,r);case"utf8":case"utf-8":return _(this,t,e,r);case"ascii":case"latin1":case"binary":return A(this,t,e,r);case"base64":return S(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return M(this,t,e,r);default:if(f)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),f=!0}},a.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};const T=4096;function R(t,e,r){let n="";r=Math.min(t.length,r);for(let i=e;in)&&(r=n);let i="";for(let n=e;nr)throw new RangeError("Trying to access beyond buffer length")}function U(t,e,r,n,i,f){if(!a.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||et.length)throw new RangeError("Index out of range")}function N(t,e,r,n,i){q(e,n,i,t,r,7);let f=Number(e&BigInt(4294967295));t[r++]=f,f>>=8,t[r++]=f,f>>=8,t[r++]=f,f>>=8,t[r++]=f;let o=Number(e>>BigInt(32)&BigInt(4294967295));return t[r++]=o,o>>=8,t[r++]=o,o>>=8,t[r++]=o,o>>=8,t[r++]=o,r}function B(t,e,r,n,i){q(e,n,i,t,r,7);let f=Number(e&BigInt(4294967295));t[r+7]=f,f>>=8,t[r+6]=f,f>>=8,t[r+5]=f,f>>=8,t[r+4]=f;let o=Number(e>>BigInt(32)&BigInt(4294967295));return t[r+3]=o,o>>=8,t[r+2]=o,o>>=8,t[r+1]=o,o>>=8,t[r]=o,r+8}function k(t,e,r,n,i,f){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function D(t,e,r,n,f){return e=+e,r>>>=0,f||k(t,0,r,4),i.write(t,e,r,n,23,4),r+4}function C(t,e,r,n,f){return e=+e,r>>>=0,f||k(t,0,r,8),i.write(t,e,r,n,52,8),r+8}a.prototype.slice=function(t,e){const r=this.length;(t=~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),(e=void 0===e?r:~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),e>>=0,e>>>=0,r||x(t,e,this.length);let n=this[t],i=1,f=0;for(;++f>>=0,e>>>=0,r||x(t,e,this.length);let n=this[t+--e],i=1;for(;e>0&&(i*=256);)n+=this[t+--e]*i;return n},a.prototype.readUint8=a.prototype.readUInt8=function(t,e){return t>>>=0,e||x(t,1,this.length),this[t]},a.prototype.readUint16LE=a.prototype.readUInt16LE=function(t,e){return t>>>=0,e||x(t,2,this.length),this[t]|this[t+1]<<8},a.prototype.readUint16BE=a.prototype.readUInt16BE=function(t,e){return t>>>=0,e||x(t,2,this.length),this[t]<<8|this[t+1]},a.prototype.readUint32LE=a.prototype.readUInt32LE=function(t,e){return t>>>=0,e||x(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},a.prototype.readUint32BE=a.prototype.readUInt32BE=function(t,e){return t>>>=0,e||x(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},a.prototype.readBigUInt64LE=J((function(t){F(t>>>=0,"offset");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||Z(t,this.length-8);const n=e+256*this[++t]+65536*this[++t]+this[++t]*2**24,i=this[++t]+256*this[++t]+65536*this[++t]+r*2**24;return BigInt(n)+(BigInt(i)<>>=0,"offset");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||Z(t,this.length-8);const n=e*2**24+65536*this[++t]+256*this[++t]+this[++t],i=this[++t]*2**24+65536*this[++t]+256*this[++t]+r;return(BigInt(n)<>>=0,e>>>=0,r||x(t,e,this.length);let n=this[t],i=1,f=0;for(;++f=i&&(n-=Math.pow(2,8*e)),n},a.prototype.readIntBE=function(t,e,r){t>>>=0,e>>>=0,r||x(t,e,this.length);let n=e,i=1,f=this[t+--n];for(;n>0&&(i*=256);)f+=this[t+--n]*i;return i*=128,f>=i&&(f-=Math.pow(2,8*e)),f},a.prototype.readInt8=function(t,e){return t>>>=0,e||x(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},a.prototype.readInt16LE=function(t,e){t>>>=0,e||x(t,2,this.length);const r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},a.prototype.readInt16BE=function(t,e){t>>>=0,e||x(t,2,this.length);const r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},a.prototype.readInt32LE=function(t,e){return t>>>=0,e||x(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},a.prototype.readInt32BE=function(t,e){return t>>>=0,e||x(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},a.prototype.readBigInt64LE=J((function(t){F(t>>>=0,"offset");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||Z(t,this.length-8);const n=this[t+4]+256*this[t+5]+65536*this[t+6]+(r<<24);return(BigInt(n)<>>=0,"offset");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||Z(t,this.length-8);const n=(e<<24)+65536*this[++t]+256*this[++t]+this[++t];return(BigInt(n)<>>=0,e||x(t,4,this.length),i.read(this,t,!0,23,4)},a.prototype.readFloatBE=function(t,e){return t>>>=0,e||x(t,4,this.length),i.read(this,t,!1,23,4)},a.prototype.readDoubleLE=function(t,e){return t>>>=0,e||x(t,8,this.length),i.read(this,t,!0,52,8)},a.prototype.readDoubleBE=function(t,e){return t>>>=0,e||x(t,8,this.length),i.read(this,t,!1,52,8)},a.prototype.writeUintLE=a.prototype.writeUIntLE=function(t,e,r,n){t=+t,e>>>=0,r>>>=0,n||U(this,t,e,r,Math.pow(2,8*r)-1,0);let i=1,f=0;for(this[e]=255&t;++f>>=0,r>>>=0,n||U(this,t,e,r,Math.pow(2,8*r)-1,0);let i=r-1,f=1;for(this[e+i]=255&t;--i>=0&&(f*=256);)this[e+i]=t/f&255;return e+r},a.prototype.writeUint8=a.prototype.writeUInt8=function(t,e,r){return t=+t,e>>>=0,r||U(this,t,e,1,255,0),this[e]=255&t,e+1},a.prototype.writeUint16LE=a.prototype.writeUInt16LE=function(t,e,r){return t=+t,e>>>=0,r||U(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},a.prototype.writeUint16BE=a.prototype.writeUInt16BE=function(t,e,r){return t=+t,e>>>=0,r||U(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},a.prototype.writeUint32LE=a.prototype.writeUInt32LE=function(t,e,r){return t=+t,e>>>=0,r||U(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},a.prototype.writeUint32BE=a.prototype.writeUInt32BE=function(t,e,r){return t=+t,e>>>=0,r||U(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},a.prototype.writeBigUInt64LE=J((function(t,e=0){return N(this,t,e,BigInt(0),BigInt("0xffffffffffffffff"))})),a.prototype.writeBigUInt64BE=J((function(t,e=0){return B(this,t,e,BigInt(0),BigInt("0xffffffffffffffff"))})),a.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e>>>=0,!n){const n=Math.pow(2,8*r-1);U(this,t,e,r,n-1,-n)}let i=0,f=1,o=0;for(this[e]=255&t;++i>0)-o&255;return e+r},a.prototype.writeIntBE=function(t,e,r,n){if(t=+t,e>>>=0,!n){const n=Math.pow(2,8*r-1);U(this,t,e,r,n-1,-n)}let i=r-1,f=1,o=0;for(this[e+i]=255&t;--i>=0&&(f*=256);)t<0&&0===o&&0!==this[e+i+1]&&(o=1),this[e+i]=(t/f>>0)-o&255;return e+r},a.prototype.writeInt8=function(t,e,r){return t=+t,e>>>=0,r||U(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},a.prototype.writeInt16LE=function(t,e,r){return t=+t,e>>>=0,r||U(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},a.prototype.writeInt16BE=function(t,e,r){return t=+t,e>>>=0,r||U(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},a.prototype.writeInt32LE=function(t,e,r){return t=+t,e>>>=0,r||U(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},a.prototype.writeInt32BE=function(t,e,r){return t=+t,e>>>=0,r||U(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},a.prototype.writeBigInt64LE=J((function(t,e=0){return N(this,t,e,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),a.prototype.writeBigInt64BE=J((function(t,e=0){return B(this,t,e,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),a.prototype.writeFloatLE=function(t,e,r){return D(this,t,e,!0,r)},a.prototype.writeFloatBE=function(t,e,r){return D(this,t,e,!1,r)},a.prototype.writeDoubleLE=function(t,e,r){return C(this,t,e,!0,r)},a.prototype.writeDoubleBE=function(t,e,r){return C(this,t,e,!1,r)},a.prototype.copy=function(t,e,r,n){if(!a.isBuffer(t))throw new TypeError("argument should be a Buffer");if(r||(r=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&n=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-e>>=0,r=void 0===r?this.length:r>>>0,t||(t=0),"number"==typeof t)for(i=e;i=n+4;r-=3)e=`_${t.slice(r-3,r)}${e}`;return`${t.slice(0,r)}${e}`}function q(t,e,r,n,i,f){if(t>r||t3?0===e||e===BigInt(0)?`>= 0${n} and < 2${n} ** ${8*(f+1)}${n}`:`>= -(2${n} ** ${8*(f+1)-1}${n}) and < 2 ** ${8*(f+1)-1}${n}`:`>= ${e}${n} and <= ${r}${n}`,new H.ERR_OUT_OF_RANGE("value",i,t)}!function(t,e,r){F(e,"offset"),void 0!==t[e]&&void 0!==t[e+r]||Z(e,t.length-(r+1))}(n,i,f)}function F(t,e){if("number"!=typeof t)throw new H.ERR_INVALID_ARG_TYPE(e,"number",t)}function Z(t,e,r){if(Math.floor(t)!==t)throw F(t,r),new H.ERR_OUT_OF_RANGE(r||"offset","an integer",t);if(e<0)throw new H.ERR_BUFFER_OUT_OF_BOUNDS;throw new H.ERR_OUT_OF_RANGE(r||"offset",`>= ${r?1:0} and <= ${e}`,t)}z("ERR_BUFFER_OUT_OF_BOUNDS",(function(t){return t?`${t} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"}),RangeError),z("ERR_INVALID_ARG_TYPE",(function(t,e){return`The "${t}" argument must be of type number. Received type ${typeof e}`}),TypeError),z("ERR_OUT_OF_RANGE",(function(t,e,r){let n=`The value of "${t}" is out of range.`,i=r;return Number.isInteger(r)&&Math.abs(r)>2**32?i=K(String(r)):"bigint"==typeof r&&(i=String(r),(r>BigInt(2)**BigInt(32)||r<-(BigInt(2)**BigInt(32)))&&(i=K(i)),i+="n"),n+=` It must be ${e}. Received ${i}`,n}),RangeError);const j=/[^+/0-9A-Za-z-_]/g;function G(t,e){let r;e=e||1/0;const n=t.length;let i=null;const f=[];for(let o=0;o55295&&r<57344){if(!i){if(r>56319){(e-=3)>-1&&f.push(239,191,189);continue}if(o+1===n){(e-=3)>-1&&f.push(239,191,189);continue}i=r;continue}if(r<56320){(e-=3)>-1&&f.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(e-=3)>-1&&f.push(239,191,189);if(i=null,r<128){if((e-=1)<0)break;f.push(r)}else if(r<2048){if((e-=2)<0)break;f.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;f.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;f.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return f}function $(t){return n.toByteArray(function(t){if((t=(t=t.split("=")[0]).trim().replace(j,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function V(t,e,r,n){let i;for(i=0;i=e.length||i>=t.length);++i)e[i+r]=t[i];return i}function Y(t,e){return t instanceof e||null!=t&&null!=t.constructor&&null!=t.constructor.name&&t.constructor.name===e.name}function X(t){return t!=t}const W=function(){const t="0123456789abcdef",e=new Array(256);for(let r=0;r<16;++r){const n=16*r;for(let i=0;i<16;++i)e[n+i]=t[r]+t[i]}return e}();function J(t){return"undefined"==typeof BigInt?Q:t}function Q(){throw new Error("BigInt not supported")}},7554:(t,e,r)=>{"use strict";var n=e;n.version=r(763).i8,n.utils=r(8288),n.rand=r(2745),n.curve=r(8610),n.curves=r(1479),n.ec=r(8596),n.eddsa=r(9208)},8919:(t,e,r)=>{"use strict";var n=r(2197),i=r(8288),f=i.getNAF,o=i.getJSF,s=i.assert;function a(t,e){this.type=t,this.p=new n(e.p,16),this.red=e.prime?n.red(e.prime):n.mont(this.p),this.zero=new n(0).toRed(this.red),this.one=new n(1).toRed(this.red),this.two=new n(2).toRed(this.red),this.n=e.n&&new n(e.n,16),this.g=e.g&&this.pointFromJSON(e.g,e.gRed),this._wnafT1=new Array(4),this._wnafT2=new Array(4),this._wnafT3=new Array(4),this._wnafT4=new Array(4),this._bitLength=this.n?this.n.bitLength():0;var r=this.n&&this.p.div(this.n);!r||r.cmpn(100)>0?this.redN=null:(this._maxwellTrick=!0,this.redN=this.n.toRed(this.red))}function d(t,e){this.curve=t,this.type=e,this.precomputed=null}t.exports=a,a.prototype.point=function(){throw new Error("Not implemented")},a.prototype.validate=function(){throw new Error("Not implemented")},a.prototype._fixedNafMul=function(t,e){s(t.precomputed);var r=t._getDoubles(),n=f(e,1,this._bitLength),i=(1<=o;h--)a=(a<<1)+n[h];d.push(a)}for(var c=this.jpoint(null,null,null),u=this.jpoint(null,null,null),l=i;l>0;l--){for(o=0;o=0;d--){for(var h=0;d>=0&&0===o[d];d--)h++;if(d>=0&&h++,a=a.dblp(h),d<0)break;var c=o[d];s(0!==c),a="affine"===t.type?c>0?a.mixedAdd(i[c-1>>1]):a.mixedAdd(i[-c-1>>1].neg()):c>0?a.add(i[c-1>>1]):a.add(i[-c-1>>1].neg())}return"affine"===t.type?a.toP():a},a.prototype._wnafMulAdd=function(t,e,r,n,i){var s,a,d,h=this._wnafT1,c=this._wnafT2,u=this._wnafT3,l=0;for(s=0;s=1;s-=2){var p=s-1,g=s;if(1===h[p]&&1===h[g]){var m=[e[p],null,null,e[g]];0===e[p].y.cmp(e[g].y)?(m[1]=e[p].add(e[g]),m[2]=e[p].toJ().mixedAdd(e[g].neg())):0===e[p].y.cmp(e[g].y.redNeg())?(m[1]=e[p].toJ().mixedAdd(e[g]),m[2]=e[p].add(e[g].neg())):(m[1]=e[p].toJ().mixedAdd(e[g]),m[2]=e[p].toJ().mixedAdd(e[g].neg()));var y=[-3,-1,-5,-7,0,7,5,1,3],v=o(r[p],r[g]);for(l=Math.max(v[0].length,l),u[p]=new Array(l),u[g]=new Array(l),a=0;a=0;s--){for(var M=0;s>=0;){var E=!0;for(a=0;a=0&&M++,A=A.dblp(M),s<0)break;for(a=0;a0?d=c[a][I-1>>1]:I<0&&(d=c[a][-I-1>>1].neg()),A="affine"===d.type?A.mixedAdd(d):A.add(d))}}for(s=0;s=Math.ceil((t.bitLength()+1)/e.step)},d.prototype._getDoubles=function(t,e){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var r=[this],n=this,i=0;i{"use strict";var n=r(8288),i=r(2197),f=r(1285),o=r(8919),s=n.assert;function a(t){this.twisted=1!=(0|t.a),this.mOneA=this.twisted&&-1==(0|t.a),this.extended=this.mOneA,o.call(this,"edwards",t),this.a=new i(t.a,16).umod(this.red.m),this.a=this.a.toRed(this.red),this.c=new i(t.c,16).toRed(this.red),this.c2=this.c.redSqr(),this.d=new i(t.d,16).toRed(this.red),this.dd=this.d.redAdd(this.d),s(!this.twisted||0===this.c.fromRed().cmpn(1)),this.oneC=1==(0|t.c)}function d(t,e,r,n,f){o.BasePoint.call(this,t,"projective"),null===e&&null===r&&null===n?(this.x=this.curve.zero,this.y=this.curve.one,this.z=this.curve.one,this.t=this.curve.zero,this.zOne=!0):(this.x=new i(e,16),this.y=new i(r,16),this.z=n?new i(n,16):this.curve.one,this.t=f&&new i(f,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.t&&!this.t.red&&(this.t=this.t.toRed(this.curve.red)),this.zOne=this.z===this.curve.one,this.curve.extended&&!this.t&&(this.t=this.x.redMul(this.y),this.zOne||(this.t=this.t.redMul(this.z.redInvm()))))}f(a,o),t.exports=a,a.prototype._mulA=function(t){return this.mOneA?t.redNeg():this.a.redMul(t)},a.prototype._mulC=function(t){return this.oneC?t:this.c.redMul(t)},a.prototype.jpoint=function(t,e,r,n){return this.point(t,e,r,n)},a.prototype.pointFromX=function(t,e){(t=new i(t,16)).red||(t=t.toRed(this.red));var r=t.redSqr(),n=this.c2.redSub(this.a.redMul(r)),f=this.one.redSub(this.c2.redMul(this.d).redMul(r)),o=n.redMul(f.redInvm()),s=o.redSqrt();if(0!==s.redSqr().redSub(o).cmp(this.zero))throw new Error("invalid point");var a=s.fromRed().isOdd();return(e&&!a||!e&&a)&&(s=s.redNeg()),this.point(t,s)},a.prototype.pointFromY=function(t,e){(t=new i(t,16)).red||(t=t.toRed(this.red));var r=t.redSqr(),n=r.redSub(this.c2),f=r.redMul(this.d).redMul(this.c2).redSub(this.a),o=n.redMul(f.redInvm());if(0===o.cmp(this.zero)){if(e)throw new Error("invalid point");return this.point(this.zero,t)}var s=o.redSqrt();if(0!==s.redSqr().redSub(o).cmp(this.zero))throw new Error("invalid point");return s.fromRed().isOdd()!==e&&(s=s.redNeg()),this.point(s,t)},a.prototype.validate=function(t){if(t.isInfinity())return!0;t.normalize();var e=t.x.redSqr(),r=t.y.redSqr(),n=e.redMul(this.a).redAdd(r),i=this.c2.redMul(this.one.redAdd(this.d.redMul(e).redMul(r)));return 0===n.cmp(i)},f(d,o.BasePoint),a.prototype.pointFromJSON=function(t){return d.fromJSON(this,t)},a.prototype.point=function(t,e,r,n){return new d(this,t,e,r,n)},d.fromJSON=function(t,e){return new d(t,e[0],e[1],e[2])},d.prototype.inspect=function(){return this.isInfinity()?"":""},d.prototype.isInfinity=function(){return 0===this.x.cmpn(0)&&(0===this.y.cmp(this.z)||this.zOne&&0===this.y.cmp(this.curve.c))},d.prototype._extDbl=function(){var t=this.x.redSqr(),e=this.y.redSqr(),r=this.z.redSqr();r=r.redIAdd(r);var n=this.curve._mulA(t),i=this.x.redAdd(this.y).redSqr().redISub(t).redISub(e),f=n.redAdd(e),o=f.redSub(r),s=n.redSub(e),a=i.redMul(o),d=f.redMul(s),h=i.redMul(s),c=o.redMul(f);return this.curve.point(a,d,c,h)},d.prototype._projDbl=function(){var t,e,r,n,i,f,o=this.x.redAdd(this.y).redSqr(),s=this.x.redSqr(),a=this.y.redSqr();if(this.curve.twisted){var d=(n=this.curve._mulA(s)).redAdd(a);this.zOne?(t=o.redSub(s).redSub(a).redMul(d.redSub(this.curve.two)),e=d.redMul(n.redSub(a)),r=d.redSqr().redSub(d).redSub(d)):(i=this.z.redSqr(),f=d.redSub(i).redISub(i),t=o.redSub(s).redISub(a).redMul(f),e=d.redMul(n.redSub(a)),r=d.redMul(f))}else n=s.redAdd(a),i=this.curve._mulC(this.z).redSqr(),f=n.redSub(i).redSub(i),t=this.curve._mulC(o.redISub(n)).redMul(f),e=this.curve._mulC(n).redMul(s.redISub(a)),r=n.redMul(f);return this.curve.point(t,e,r)},d.prototype.dbl=function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},d.prototype._extAdd=function(t){var e=this.y.redSub(this.x).redMul(t.y.redSub(t.x)),r=this.y.redAdd(this.x).redMul(t.y.redAdd(t.x)),n=this.t.redMul(this.curve.dd).redMul(t.t),i=this.z.redMul(t.z.redAdd(t.z)),f=r.redSub(e),o=i.redSub(n),s=i.redAdd(n),a=r.redAdd(e),d=f.redMul(o),h=s.redMul(a),c=f.redMul(a),u=o.redMul(s);return this.curve.point(d,h,u,c)},d.prototype._projAdd=function(t){var e,r,n=this.z.redMul(t.z),i=n.redSqr(),f=this.x.redMul(t.x),o=this.y.redMul(t.y),s=this.curve.d.redMul(f).redMul(o),a=i.redSub(s),d=i.redAdd(s),h=this.x.redAdd(this.y).redMul(t.x.redAdd(t.y)).redISub(f).redISub(o),c=n.redMul(a).redMul(h);return this.curve.twisted?(e=n.redMul(d).redMul(o.redSub(this.curve._mulA(f))),r=a.redMul(d)):(e=n.redMul(d).redMul(o.redSub(f)),r=this.curve._mulC(a).redMul(d)),this.curve.point(c,e,r)},d.prototype.add=function(t){return this.isInfinity()?t:t.isInfinity()?this:this.curve.extended?this._extAdd(t):this._projAdd(t)},d.prototype.mul=function(t){return this._hasDoubles(t)?this.curve._fixedNafMul(this,t):this.curve._wnafMul(this,t)},d.prototype.mulAdd=function(t,e,r){return this.curve._wnafMulAdd(1,[this,e],[t,r],2,!1)},d.prototype.jmulAdd=function(t,e,r){return this.curve._wnafMulAdd(1,[this,e],[t,r],2,!0)},d.prototype.normalize=function(){if(this.zOne)return this;var t=this.z.redInvm();return this.x=this.x.redMul(t),this.y=this.y.redMul(t),this.t&&(this.t=this.t.redMul(t)),this.z=this.curve.one,this.zOne=!0,this},d.prototype.neg=function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},d.prototype.getX=function(){return this.normalize(),this.x.fromRed()},d.prototype.getY=function(){return this.normalize(),this.y.fromRed()},d.prototype.eq=function(t){return this===t||0===this.getX().cmp(t.getX())&&0===this.getY().cmp(t.getY())},d.prototype.eqXToP=function(t){var e=t.toRed(this.curve.red).redMul(this.z);if(0===this.x.cmp(e))return!0;for(var r=t.clone(),n=this.curve.redN.redMul(this.z);;){if(r.iadd(this.curve.n),r.cmp(this.curve.p)>=0)return!1;if(e.redIAdd(n),0===this.x.cmp(e))return!0}},d.prototype.toP=d.prototype.normalize,d.prototype.mixedAdd=d.prototype.add},8610:(t,e,r)=>{"use strict";var n=e;n.base=r(8919),n.short=r(7715),n.mont=r(5125),n.edwards=r(7105)},5125:(t,e,r)=>{"use strict";var n=r(2197),i=r(1285),f=r(8919),o=r(8288);function s(t){f.call(this,"mont",t),this.a=new n(t.a,16).toRed(this.red),this.b=new n(t.b,16).toRed(this.red),this.i4=new n(4).toRed(this.red).redInvm(),this.two=new n(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}function a(t,e,r){f.BasePoint.call(this,t,"projective"),null===e&&null===r?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new n(e,16),this.z=new n(r,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}i(s,f),t.exports=s,s.prototype.validate=function(t){var e=t.normalize().x,r=e.redSqr(),n=r.redMul(e).redAdd(r.redMul(this.a)).redAdd(e);return 0===n.redSqrt().redSqr().cmp(n)},i(a,f.BasePoint),s.prototype.decodePoint=function(t,e){return this.point(o.toArray(t,e),1)},s.prototype.point=function(t,e){return new a(this,t,e)},s.prototype.pointFromJSON=function(t){return a.fromJSON(this,t)},a.prototype.precompute=function(){},a.prototype._encode=function(){return this.getX().toArray("be",this.curve.p.byteLength())},a.fromJSON=function(t,e){return new a(t,e[0],e[1]||t.one)},a.prototype.inspect=function(){return this.isInfinity()?"":""},a.prototype.isInfinity=function(){return 0===this.z.cmpn(0)},a.prototype.dbl=function(){var t=this.x.redAdd(this.z).redSqr(),e=this.x.redSub(this.z).redSqr(),r=t.redSub(e),n=t.redMul(e),i=r.redMul(e.redAdd(this.curve.a24.redMul(r)));return this.curve.point(n,i)},a.prototype.add=function(){throw new Error("Not supported on Montgomery curve")},a.prototype.diffAdd=function(t,e){var r=this.x.redAdd(this.z),n=this.x.redSub(this.z),i=t.x.redAdd(t.z),f=t.x.redSub(t.z).redMul(r),o=i.redMul(n),s=e.z.redMul(f.redAdd(o).redSqr()),a=e.x.redMul(f.redISub(o).redSqr());return this.curve.point(s,a)},a.prototype.mul=function(t){for(var e=t.clone(),r=this,n=this.curve.point(null,null),i=[];0!==e.cmpn(0);e.iushrn(1))i.push(e.andln(1));for(var f=i.length-1;f>=0;f--)0===i[f]?(r=r.diffAdd(n,this),n=n.dbl()):(n=r.diffAdd(n,this),r=r.dbl());return n},a.prototype.mulAdd=function(){throw new Error("Not supported on Montgomery curve")},a.prototype.jumlAdd=function(){throw new Error("Not supported on Montgomery curve")},a.prototype.eq=function(t){return 0===this.getX().cmp(t.getX())},a.prototype.normalize=function(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},a.prototype.getX=function(){return this.normalize(),this.x.fromRed()}},7715:(t,e,r)=>{"use strict";var n=r(8288),i=r(2197),f=r(1285),o=r(8919),s=n.assert;function a(t){o.call(this,"short",t),this.a=new i(t.a,16).toRed(this.red),this.b=new i(t.b,16).toRed(this.red),this.tinv=this.two.redInvm(),this.zeroA=0===this.a.fromRed().cmpn(0),this.threeA=0===this.a.fromRed().sub(this.p).cmpn(-3),this.endo=this._getEndomorphism(t),this._endoWnafT1=new Array(4),this._endoWnafT2=new Array(4)}function d(t,e,r,n){o.BasePoint.call(this,t,"affine"),null===e&&null===r?(this.x=null,this.y=null,this.inf=!0):(this.x=new i(e,16),this.y=new i(r,16),n&&(this.x.forceRed(this.curve.red),this.y.forceRed(this.curve.red)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.inf=!1)}function h(t,e,r,n){o.BasePoint.call(this,t,"jacobian"),null===e&&null===r&&null===n?(this.x=this.curve.one,this.y=this.curve.one,this.z=new i(0)):(this.x=new i(e,16),this.y=new i(r,16),this.z=new i(n,16)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.zOne=this.z===this.curve.one}f(a,o),t.exports=a,a.prototype._getEndomorphism=function(t){if(this.zeroA&&this.g&&this.n&&1===this.p.modn(3)){var e,r;if(t.beta)e=new i(t.beta,16).toRed(this.red);else{var n=this._getEndoRoots(this.p);e=(e=n[0].cmp(n[1])<0?n[0]:n[1]).toRed(this.red)}if(t.lambda)r=new i(t.lambda,16);else{var f=this._getEndoRoots(this.n);0===this.g.mul(f[0]).x.cmp(this.g.x.redMul(e))?r=f[0]:(r=f[1],s(0===this.g.mul(r).x.cmp(this.g.x.redMul(e))))}return{beta:e,lambda:r,basis:t.basis?t.basis.map((function(t){return{a:new i(t.a,16),b:new i(t.b,16)}})):this._getEndoBasis(r)}}},a.prototype._getEndoRoots=function(t){var e=t===this.p?this.red:i.mont(t),r=new i(2).toRed(e).redInvm(),n=r.redNeg(),f=new i(3).toRed(e).redNeg().redSqrt().redMul(r);return[n.redAdd(f).fromRed(),n.redSub(f).fromRed()]},a.prototype._getEndoBasis=function(t){for(var e,r,n,f,o,s,a,d,h,c=this.n.ushrn(Math.floor(this.n.bitLength()/2)),u=t,l=this.n.clone(),b=new i(1),p=new i(0),g=new i(0),m=new i(1),y=0;0!==u.cmpn(0);){var v=l.div(u);d=l.sub(v.mul(u)),h=g.sub(v.mul(b));var w=m.sub(v.mul(p));if(!n&&d.cmp(c)<0)e=a.neg(),r=b,n=d.neg(),f=h;else if(n&&2==++y)break;a=d,l=u,u=d,g=b,b=h,m=p,p=w}o=d.neg(),s=h;var _=n.sqr().add(f.sqr());return o.sqr().add(s.sqr()).cmp(_)>=0&&(o=e,s=r),n.negative&&(n=n.neg(),f=f.neg()),o.negative&&(o=o.neg(),s=s.neg()),[{a:n,b:f},{a:o,b:s}]},a.prototype._endoSplit=function(t){var e=this.endo.basis,r=e[0],n=e[1],i=n.b.mul(t).divRound(this.n),f=r.b.neg().mul(t).divRound(this.n),o=i.mul(r.a),s=f.mul(n.a),a=i.mul(r.b),d=f.mul(n.b);return{k1:t.sub(o).sub(s),k2:a.add(d).neg()}},a.prototype.pointFromX=function(t,e){(t=new i(t,16)).red||(t=t.toRed(this.red));var r=t.redSqr().redMul(t).redIAdd(t.redMul(this.a)).redIAdd(this.b),n=r.redSqrt();if(0!==n.redSqr().redSub(r).cmp(this.zero))throw new Error("invalid point");var f=n.fromRed().isOdd();return(e&&!f||!e&&f)&&(n=n.redNeg()),this.point(t,n)},a.prototype.validate=function(t){if(t.inf)return!0;var e=t.x,r=t.y,n=this.a.redMul(e),i=e.redSqr().redMul(e).redIAdd(n).redIAdd(this.b);return 0===r.redSqr().redISub(i).cmpn(0)},a.prototype._endoWnafMulAdd=function(t,e,r){for(var n=this._endoWnafT1,i=this._endoWnafT2,f=0;f":""},d.prototype.isInfinity=function(){return this.inf},d.prototype.add=function(t){if(this.inf)return t;if(t.inf)return this;if(this.eq(t))return this.dbl();if(this.neg().eq(t))return this.curve.point(null,null);if(0===this.x.cmp(t.x))return this.curve.point(null,null);var e=this.y.redSub(t.y);0!==e.cmpn(0)&&(e=e.redMul(this.x.redSub(t.x).redInvm()));var r=e.redSqr().redISub(this.x).redISub(t.x),n=e.redMul(this.x.redSub(r)).redISub(this.y);return this.curve.point(r,n)},d.prototype.dbl=function(){if(this.inf)return this;var t=this.y.redAdd(this.y);if(0===t.cmpn(0))return this.curve.point(null,null);var e=this.curve.a,r=this.x.redSqr(),n=t.redInvm(),i=r.redAdd(r).redIAdd(r).redIAdd(e).redMul(n),f=i.redSqr().redISub(this.x.redAdd(this.x)),o=i.redMul(this.x.redSub(f)).redISub(this.y);return this.curve.point(f,o)},d.prototype.getX=function(){return this.x.fromRed()},d.prototype.getY=function(){return this.y.fromRed()},d.prototype.mul=function(t){return t=new i(t,16),this.isInfinity()?this:this._hasDoubles(t)?this.curve._fixedNafMul(this,t):this.curve.endo?this.curve._endoWnafMulAdd([this],[t]):this.curve._wnafMul(this,t)},d.prototype.mulAdd=function(t,e,r){var n=[this,e],i=[t,r];return this.curve.endo?this.curve._endoWnafMulAdd(n,i):this.curve._wnafMulAdd(1,n,i,2)},d.prototype.jmulAdd=function(t,e,r){var n=[this,e],i=[t,r];return this.curve.endo?this.curve._endoWnafMulAdd(n,i,!0):this.curve._wnafMulAdd(1,n,i,2,!0)},d.prototype.eq=function(t){return this===t||this.inf===t.inf&&(this.inf||0===this.x.cmp(t.x)&&0===this.y.cmp(t.y))},d.prototype.neg=function(t){if(this.inf)return this;var e=this.curve.point(this.x,this.y.redNeg());if(t&&this.precomputed){var r=this.precomputed,n=function(t){return t.neg()};e.precomputed={naf:r.naf&&{wnd:r.naf.wnd,points:r.naf.points.map(n)},doubles:r.doubles&&{step:r.doubles.step,points:r.doubles.points.map(n)}}}return e},d.prototype.toJ=function(){return this.inf?this.curve.jpoint(null,null,null):this.curve.jpoint(this.x,this.y,this.curve.one)},f(h,o.BasePoint),a.prototype.jpoint=function(t,e,r){return new h(this,t,e,r)},h.prototype.toP=function(){if(this.isInfinity())return this.curve.point(null,null);var t=this.z.redInvm(),e=t.redSqr(),r=this.x.redMul(e),n=this.y.redMul(e).redMul(t);return this.curve.point(r,n)},h.prototype.neg=function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},h.prototype.add=function(t){if(this.isInfinity())return t;if(t.isInfinity())return this;var e=t.z.redSqr(),r=this.z.redSqr(),n=this.x.redMul(e),i=t.x.redMul(r),f=this.y.redMul(e.redMul(t.z)),o=t.y.redMul(r.redMul(this.z)),s=n.redSub(i),a=f.redSub(o);if(0===s.cmpn(0))return 0!==a.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var d=s.redSqr(),h=d.redMul(s),c=n.redMul(d),u=a.redSqr().redIAdd(h).redISub(c).redISub(c),l=a.redMul(c.redISub(u)).redISub(f.redMul(h)),b=this.z.redMul(t.z).redMul(s);return this.curve.jpoint(u,l,b)},h.prototype.mixedAdd=function(t){if(this.isInfinity())return t.toJ();if(t.isInfinity())return this;var e=this.z.redSqr(),r=this.x,n=t.x.redMul(e),i=this.y,f=t.y.redMul(e).redMul(this.z),o=r.redSub(n),s=i.redSub(f);if(0===o.cmpn(0))return 0!==s.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var a=o.redSqr(),d=a.redMul(o),h=r.redMul(a),c=s.redSqr().redIAdd(d).redISub(h).redISub(h),u=s.redMul(h.redISub(c)).redISub(i.redMul(d)),l=this.z.redMul(o);return this.curve.jpoint(c,u,l)},h.prototype.dblp=function(t){if(0===t)return this;if(this.isInfinity())return this;if(!t)return this.dbl();var e;if(this.curve.zeroA||this.curve.threeA){var r=this;for(e=0;e=0)return!1;if(r.redIAdd(i),0===this.x.cmp(r))return!0}},h.prototype.inspect=function(){return this.isInfinity()?"":""},h.prototype.isInfinity=function(){return 0===this.z.cmpn(0)}},1479:(t,e,r)=>{"use strict";var n,i=e,f=r(4485),o=r(8610),s=r(8288).assert;function a(t){"short"===t.type?this.curve=new o.short(t):"edwards"===t.type?this.curve=new o.edwards(t):this.curve=new o.mont(t),this.g=this.curve.g,this.n=this.curve.n,this.hash=t.hash,s(this.g.validate(),"Invalid curve"),s(this.g.mul(this.n).isInfinity(),"Invalid curve, G*N != O")}function d(t,e){Object.defineProperty(i,t,{configurable:!0,enumerable:!0,get:function(){var r=new a(e);return Object.defineProperty(i,t,{configurable:!0,enumerable:!0,value:r}),r}})}i.PresetCurve=a,d("p192",{type:"short",prime:"p192",p:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff",a:"ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc",b:"64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1",n:"ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831",hash:f.sha256,gRed:!1,g:["188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012","07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811"]}),d("p224",{type:"short",prime:"p224",p:"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001",a:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe",b:"b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4",n:"ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d",hash:f.sha256,gRed:!1,g:["b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21","bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34"]}),d("p256",{type:"short",prime:null,p:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff",a:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc",b:"5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b",n:"ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551",hash:f.sha256,gRed:!1,g:["6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296","4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5"]}),d("p384",{type:"short",prime:null,p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 ffffffff",a:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 fffffffc",b:"b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f 5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef",n:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 f4372ddf 581a0db2 48b0a77a ecec196a ccc52973",hash:f.sha384,gRed:!1,g:["aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 5502f25d bf55296c 3a545e38 72760ab7","3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 0a60b1ce 1d7e819d 7a431d7c 90ea0e5f"]}),d("p521",{type:"short",prime:null,p:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff",a:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffc",b:"00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b 99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd 3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00",n:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409",hash:f.sha512,gRed:!1,g:["000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66","00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 3fad0761 353c7086 a272c240 88be9476 9fd16650"]}),d("curve25519",{type:"mont",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"76d06",b:"1",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:f.sha256,gRed:!1,g:["9"]}),d("ed25519",{type:"edwards",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"-1",c:"1",d:"52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:f.sha256,gRed:!1,g:["216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a","6666666666666666666666666666666666666666666666666666666666666658"]});try{n=r(7983)}catch(t){n=void 0}d("secp256k1",{type:"short",prime:"k256",p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f",a:"0",b:"7",n:"ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141",h:"1",hash:f.sha256,beta:"7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee",lambda:"5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72",basis:[{a:"3086d221a7d46bcde86c90e49284eb15",b:"-e4437ed6010e88286f547fa90abfe4c3"},{a:"114ca50f7a8e2f3f657c1108d9d44cfd8",b:"3086d221a7d46bcde86c90e49284eb15"}],gRed:!1,g:["79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",n]})},8596:(t,e,r)=>{"use strict";var n=r(2197),i=r(8873),f=r(8288),o=r(1479),s=r(2745),a=f.assert,d=r(2307),h=r(1798);function c(t){if(!(this instanceof c))return new c(t);"string"==typeof t&&(a(Object.prototype.hasOwnProperty.call(o,t),"Unknown curve "+t),t=o[t]),t instanceof o.PresetCurve&&(t={curve:t}),this.curve=t.curve.curve,this.n=this.curve.n,this.nh=this.n.ushrn(1),this.g=this.curve.g,this.g=t.curve.g,this.g.precompute(t.curve.n.bitLength()+1),this.hash=t.hash||t.curve.hash}t.exports=c,c.prototype.keyPair=function(t){return new d(this,t)},c.prototype.keyFromPrivate=function(t,e){return d.fromPrivate(this,t,e)},c.prototype.keyFromPublic=function(t,e){return d.fromPublic(this,t,e)},c.prototype.genKeyPair=function(t){t||(t={});for(var e=new i({hash:this.hash,pers:t.pers,persEnc:t.persEnc||"utf8",entropy:t.entropy||s(this.hash.hmacStrength),entropyEnc:t.entropy&&t.entropyEnc||"utf8",nonce:this.n.toArray()}),r=this.n.byteLength(),f=this.n.sub(new n(2));;){var o=new n(e.generate(r));if(!(o.cmp(f)>0))return o.iaddn(1),this.keyFromPrivate(o)}},c.prototype._truncateToN=function(t,e){var r=8*t.byteLength()-this.n.bitLength();return r>0&&(t=t.ushrn(r)),!e&&t.cmp(this.n)>=0?t.sub(this.n):t},c.prototype.sign=function(t,e,r,f){"object"==typeof r&&(f=r,r=null),f||(f={}),e=this.keyFromPrivate(e,r),t=this._truncateToN(new n(t,16));for(var o=this.n.byteLength(),s=e.getPrivate().toArray("be",o),a=t.toArray("be",o),d=new i({hash:this.hash,entropy:s,nonce:a,pers:f.pers,persEnc:f.persEnc||"utf8"}),c=this.n.sub(new n(1)),u=0;;u++){var l=f.k?f.k(u):new n(d.generate(this.n.byteLength()));if(!((l=this._truncateToN(l,!0)).cmpn(1)<=0||l.cmp(c)>=0)){var b=this.g.mul(l);if(!b.isInfinity()){var p=b.getX(),g=p.umod(this.n);if(0!==g.cmpn(0)){var m=l.invm(this.n).mul(g.mul(e.getPrivate()).iadd(t));if(0!==(m=m.umod(this.n)).cmpn(0)){var y=(b.getY().isOdd()?1:0)|(0!==p.cmp(g)?2:0);return f.canonical&&m.cmp(this.nh)>0&&(m=this.n.sub(m),y^=1),new h({r:g,s:m,recoveryParam:y})}}}}}},c.prototype.verify=function(t,e,r,i){t=this._truncateToN(new n(t,16)),r=this.keyFromPublic(r,i);var f=(e=new h(e,"hex")).r,o=e.s;if(f.cmpn(1)<0||f.cmp(this.n)>=0)return!1;if(o.cmpn(1)<0||o.cmp(this.n)>=0)return!1;var s,a=o.invm(this.n),d=a.mul(t).umod(this.n),c=a.mul(f).umod(this.n);return this.curve._maxwellTrick?!(s=this.g.jmulAdd(d,r.getPublic(),c)).isInfinity()&&s.eqXToP(f):!(s=this.g.mulAdd(d,r.getPublic(),c)).isInfinity()&&0===s.getX().umod(this.n).cmp(f)},c.prototype.recoverPubKey=function(t,e,r,i){a((3&r)===r,"The recovery param is more than two bits"),e=new h(e,i);var f=this.n,o=new n(t),s=e.r,d=e.s,c=1&r,u=r>>1;if(s.cmp(this.curve.p.umod(this.curve.n))>=0&&u)throw new Error("Unable to find sencond key candinate");s=u?this.curve.pointFromX(s.add(this.curve.n),c):this.curve.pointFromX(s,c);var l=e.r.invm(f),b=f.sub(o).mul(l).umod(f),p=d.mul(l).umod(f);return this.g.mulAdd(b,s,p)},c.prototype.getKeyRecoveryParam=function(t,e,r,n){if(null!==(e=new h(e,n)).recoveryParam)return e.recoveryParam;for(var i=0;i<4;i++){var f;try{f=this.recoverPubKey(t,e,i)}catch(t){continue}if(f.eq(r))return i}throw new Error("Unable to find valid recovery factor")}},2307:(t,e,r)=>{"use strict";var n=r(2197),i=r(8288).assert;function f(t,e){this.ec=t,this.priv=null,this.pub=null,e.priv&&this._importPrivate(e.priv,e.privEnc),e.pub&&this._importPublic(e.pub,e.pubEnc)}t.exports=f,f.fromPublic=function(t,e,r){return e instanceof f?e:new f(t,{pub:e,pubEnc:r})},f.fromPrivate=function(t,e,r){return e instanceof f?e:new f(t,{priv:e,privEnc:r})},f.prototype.validate=function(){var t=this.getPublic();return t.isInfinity()?{result:!1,reason:"Invalid public key"}:t.validate()?t.mul(this.ec.curve.n).isInfinity()?{result:!0,reason:null}:{result:!1,reason:"Public key * N != O"}:{result:!1,reason:"Public key is not a point"}},f.prototype.getPublic=function(t,e){return"string"==typeof t&&(e=t,t=null),this.pub||(this.pub=this.ec.g.mul(this.priv)),e?this.pub.encode(e,t):this.pub},f.prototype.getPrivate=function(t){return"hex"===t?this.priv.toString(16,2):this.priv},f.prototype._importPrivate=function(t,e){this.priv=new n(t,e||16),this.priv=this.priv.umod(this.ec.curve.n)},f.prototype._importPublic=function(t,e){if(t.x||t.y)return"mont"===this.ec.curve.type?i(t.x,"Need x coordinate"):"short"!==this.ec.curve.type&&"edwards"!==this.ec.curve.type||i(t.x&&t.y,"Need both x and y coordinate"),void(this.pub=this.ec.curve.point(t.x,t.y));this.pub=this.ec.curve.decodePoint(t,e)},f.prototype.derive=function(t){return t.validate()||i(t.validate(),"public point not validated"),t.mul(this.priv).getX()},f.prototype.sign=function(t,e,r){return this.ec.sign(t,this,e,r)},f.prototype.verify=function(t,e){return this.ec.verify(t,e,this)},f.prototype.inspect=function(){return""}},1798:(t,e,r)=>{"use strict";var n=r(2197),i=r(8288),f=i.assert;function o(t,e){if(t instanceof o)return t;this._importDER(t,e)||(f(t.r&&t.s,"Signature without r or s"),this.r=new n(t.r,16),this.s=new n(t.s,16),void 0===t.recoveryParam?this.recoveryParam=null:this.recoveryParam=t.recoveryParam)}function s(){this.place=0}function a(t,e){var r=t[e.place++];if(!(128&r))return r;var n=15&r;if(0===n||n>4)return!1;for(var i=0,f=0,o=e.place;f>>=0;return!(i<=127)&&(e.place=o,i)}function d(t){for(var e=0,r=t.length-1;!t[e]&&!(128&t[e+1])&&e>>3);for(t.push(128|r);--r;)t.push(e>>>(r<<3)&255);t.push(e)}}t.exports=o,o.prototype._importDER=function(t,e){t=i.toArray(t,e);var r=new s;if(48!==t[r.place++])return!1;var f=a(t,r);if(!1===f)return!1;if(f+r.place!==t.length)return!1;if(2!==t[r.place++])return!1;var o=a(t,r);if(!1===o)return!1;var d=t.slice(r.place,o+r.place);if(r.place+=o,2!==t[r.place++])return!1;var h=a(t,r);if(!1===h)return!1;if(t.length!==h+r.place)return!1;var c=t.slice(r.place,h+r.place);if(0===d[0]){if(!(128&d[1]))return!1;d=d.slice(1)}if(0===c[0]){if(!(128&c[1]))return!1;c=c.slice(1)}return this.r=new n(d),this.s=new n(c),this.recoveryParam=null,!0},o.prototype.toDER=function(t){var e=this.r.toArray(),r=this.s.toArray();for(128&e[0]&&(e=[0].concat(e)),128&r[0]&&(r=[0].concat(r)),e=d(e),r=d(r);!(r[0]||128&r[1]);)r=r.slice(1);var n=[2];h(n,e.length),(n=n.concat(e)).push(2),h(n,r.length);var f=n.concat(r),o=[48];return h(o,f.length),o=o.concat(f),i.encode(o,t)}},9208:(t,e,r)=>{"use strict";var n=r(4485),i=r(1479),f=r(8288),o=f.assert,s=f.parseBytes,a=r(851),d=r(6117);function h(t){if(o("ed25519"===t,"only tested with ed25519 so far"),!(this instanceof h))return new h(t);t=i[t].curve,this.curve=t,this.g=t.g,this.g.precompute(t.n.bitLength()+1),this.pointClass=t.point().constructor,this.encodingLength=Math.ceil(t.n.bitLength()/8),this.hash=n.sha512}t.exports=h,h.prototype.sign=function(t,e){t=s(t);var r=this.keyFromSecret(e),n=this.hashInt(r.messagePrefix(),t),i=this.g.mul(n),f=this.encodePoint(i),o=this.hashInt(f,r.pubBytes(),t).mul(r.priv()),a=n.add(o).umod(this.curve.n);return this.makeSignature({R:i,S:a,Rencoded:f})},h.prototype.verify=function(t,e,r){t=s(t),e=this.makeSignature(e);var n=this.keyFromPublic(r),i=this.hashInt(e.Rencoded(),n.pubBytes(),t),f=this.g.mul(e.S());return e.R().add(n.pub().mul(i)).eq(f)},h.prototype.hashInt=function(){for(var t=this.hash(),e=0;e{"use strict";var n=r(8288),i=n.assert,f=n.parseBytes,o=n.cachedProperty;function s(t,e){this.eddsa=t,this._secret=f(e.secret),t.isPoint(e.pub)?this._pub=e.pub:this._pubBytes=f(e.pub)}s.fromPublic=function(t,e){return e instanceof s?e:new s(t,{pub:e})},s.fromSecret=function(t,e){return e instanceof s?e:new s(t,{secret:e})},s.prototype.secret=function(){return this._secret},o(s,"pubBytes",(function(){return this.eddsa.encodePoint(this.pub())})),o(s,"pub",(function(){return this._pubBytes?this.eddsa.decodePoint(this._pubBytes):this.eddsa.g.mul(this.priv())})),o(s,"privBytes",(function(){var t=this.eddsa,e=this.hash(),r=t.encodingLength-1,n=e.slice(0,t.encodingLength);return n[0]&=248,n[r]&=127,n[r]|=64,n})),o(s,"priv",(function(){return this.eddsa.decodeInt(this.privBytes())})),o(s,"hash",(function(){return this.eddsa.hash().update(this.secret()).digest()})),o(s,"messagePrefix",(function(){return this.hash().slice(this.eddsa.encodingLength)})),s.prototype.sign=function(t){return i(this._secret,"KeyPair can only verify"),this.eddsa.sign(t,this)},s.prototype.verify=function(t,e){return this.eddsa.verify(t,e,this)},s.prototype.getSecret=function(t){return i(this._secret,"KeyPair is public only"),n.encode(this.secret(),t)},s.prototype.getPublic=function(t){return n.encode(this.pubBytes(),t)},t.exports=s},6117:(t,e,r)=>{"use strict";var n=r(2197),i=r(8288),f=i.assert,o=i.cachedProperty,s=i.parseBytes;function a(t,e){this.eddsa=t,"object"!=typeof e&&(e=s(e)),Array.isArray(e)&&(e={R:e.slice(0,t.encodingLength),S:e.slice(t.encodingLength)}),f(e.R&&e.S,"Signature without R or S"),t.isPoint(e.R)&&(this._R=e.R),e.S instanceof n&&(this._S=e.S),this._Rencoded=Array.isArray(e.R)?e.R:e.Rencoded,this._Sencoded=Array.isArray(e.S)?e.S:e.Sencoded}o(a,"S",(function(){return this.eddsa.decodeInt(this.Sencoded())})),o(a,"R",(function(){return this.eddsa.decodePoint(this.Rencoded())})),o(a,"Rencoded",(function(){return this.eddsa.encodePoint(this.R())})),o(a,"Sencoded",(function(){return this.eddsa.encodeInt(this.S())})),a.prototype.toBytes=function(){return this.Rencoded().concat(this.Sencoded())},a.prototype.toHex=function(){return i.encode(this.toBytes(),"hex").toUpperCase()},t.exports=a},7983:t=>{t.exports={doubles:{step:4,points:[["e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a","f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821"],["8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508","11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf"],["175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739","d3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695"],["363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640","4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9"],["8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c","4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36"],["723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda","96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f"],["eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa","5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999"],["100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0","cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09"],["e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d","9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d"],["feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d","e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088"],["da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1","9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d"],["53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0","5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8"],["8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047","10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a"],["385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862","283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453"],["6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7","7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160"],["3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd","56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0"],["85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83","7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6"],["948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a","53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589"],["6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8","bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17"],["e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d","4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda"],["e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725","7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd"],["213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754","4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2"],["4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c","17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6"],["fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6","6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f"],["76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39","c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01"],["c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891","893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3"],["d895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b","febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f"],["b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03","2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7"],["e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d","eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78"],["a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070","7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1"],["90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4","e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150"],["8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da","662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82"],["e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11","1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc"],["8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e","efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b"],["e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41","2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51"],["b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef","67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45"],["d68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8","db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120"],["324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d","648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84"],["4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96","35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d"],["9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd","ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d"],["6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5","9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8"],["a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266","40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8"],["7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71","34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac"],["928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac","c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f"],["85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751","1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962"],["ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e","493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907"],["827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241","c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec"],["eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3","be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d"],["e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f","4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414"],["1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19","aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd"],["146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be","b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0"],["fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9","6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811"],["da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2","8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1"],["a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13","7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c"],["174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c","ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73"],["959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba","2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd"],["d2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151","e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405"],["64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073","d99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589"],["8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458","38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e"],["13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b","69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27"],["bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366","d3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1"],["8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa","40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482"],["8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0","620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945"],["dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787","7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573"],["f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e","ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82"]]},naf:{wnd:7,points:[["f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9","388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672"],["2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4","d8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6"],["5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc","6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da"],["acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe","cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37"],["774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb","d984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b"],["f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8","ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81"],["d7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e","581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58"],["defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34","4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77"],["2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c","85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a"],["352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5","321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c"],["2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f","2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67"],["9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714","73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402"],["daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729","a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55"],["c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db","2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482"],["6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4","e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82"],["1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5","b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396"],["605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479","2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49"],["62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d","80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf"],["80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f","1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a"],["7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb","d0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7"],["d528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9","eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933"],["49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963","758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a"],["77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74","958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6"],["f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530","e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37"],["463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b","5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e"],["f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247","cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6"],["caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1","cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476"],["2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120","4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40"],["7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435","91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61"],["754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18","673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683"],["e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8","59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5"],["186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb","3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b"],["df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f","55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417"],["5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143","efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868"],["290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba","e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a"],["af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45","f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6"],["766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a","744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996"],["59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e","c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e"],["f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8","e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d"],["7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c","30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2"],["948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519","e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e"],["7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab","100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437"],["3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca","ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311"],["d3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf","8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4"],["1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610","68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575"],["733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4","f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d"],["15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c","d56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d"],["a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940","edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629"],["e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980","a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06"],["311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3","66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374"],["34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf","9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee"],["f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63","4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1"],["d7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448","fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b"],["32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf","5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661"],["7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5","8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6"],["ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6","8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e"],["16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5","5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d"],["eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99","f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc"],["78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51","f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4"],["494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5","42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c"],["a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5","204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b"],["c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997","4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913"],["841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881","73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154"],["5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5","39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865"],["36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66","d2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc"],["336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726","ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224"],["8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede","6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e"],["1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94","60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6"],["85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31","3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511"],["29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51","b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b"],["a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252","ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2"],["4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5","cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c"],["d24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b","6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3"],["ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4","322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d"],["af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f","6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700"],["e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889","2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4"],["591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246","b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196"],["11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984","998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4"],["3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a","b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257"],["cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030","bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13"],["c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197","6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096"],["c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593","c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38"],["a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef","21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f"],["347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38","60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448"],["da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a","49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a"],["c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111","5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4"],["4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502","7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437"],["3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea","be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7"],["cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26","8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d"],["b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986","39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a"],["d4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e","62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54"],["48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4","25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77"],["dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda","ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517"],["6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859","cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10"],["e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f","f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125"],["eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c","6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e"],["13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942","fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1"],["ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a","1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2"],["b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80","5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423"],["ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d","438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8"],["8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1","cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758"],["52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63","c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375"],["e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352","6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d"],["7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193","ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec"],["5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00","9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0"],["32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58","ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c"],["e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7","d3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4"],["8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8","c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f"],["4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e","67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649"],["3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d","cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826"],["674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b","299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5"],["d32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f","f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87"],["30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6","462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b"],["be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297","62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc"],["93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a","7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c"],["b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c","ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f"],["d5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52","4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a"],["d3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb","bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46"],["463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065","bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f"],["7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917","603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03"],["74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9","cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08"],["30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3","553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8"],["9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57","712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373"],["176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66","ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3"],["75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8","9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8"],["809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721","9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1"],["1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180","4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9"]]}}},8288:(t,e,r)=>{"use strict";var n=e,i=r(2197),f=r(9561),o=r(3022);n.assert=f,n.toArray=o.toArray,n.zero2=o.zero2,n.toHex=o.toHex,n.encode=o.encode,n.getNAF=function(t,e,r){var n=new Array(Math.max(t.bitLength(),r)+1);n.fill(0);for(var i=1<(i>>1)-1?(i>>1)-a:a,f.isubn(s)):s=0,n[o]=s,f.iushrn(1)}return n},n.getJSF=function(t,e){var r=[[],[]];t=t.clone(),e=e.clone();for(var n,i=0,f=0;t.cmpn(-i)>0||e.cmpn(-f)>0;){var o,s,a=t.andln(3)+i&3,d=e.andln(3)+f&3;3===a&&(a=-1),3===d&&(d=-1),o=0==(1&a)?0:3!=(n=t.andln(7)+i&7)&&5!==n||2!==d?a:-a,r[0].push(o),s=0==(1&d)?0:3!=(n=e.andln(7)+f&7)&&5!==n||2!==a?d:-d,r[1].push(s),2*i===o+1&&(i=1-i),2*f===s+1&&(f=1-f),t.iushrn(1),e.iushrn(1)}return r},n.cachedProperty=function(t,e,r){var n="_"+e;t.prototype[e]=function(){return void 0!==this[n]?this[n]:this[n]=r.call(this)}},n.parseBytes=function(t){return"string"==typeof t?n.toArray(t,"hex"):t},n.intFromLE=function(t){return new i(t,"hex","le")}},4485:(t,e,r)=>{var n=e;n.utils=r(212),n.common=r(4495),n.sha=r(5530),n.ripemd=r(1396),n.hmac=r(5047),n.sha1=n.sha.sha1,n.sha256=n.sha.sha256,n.sha224=n.sha.sha224,n.sha384=n.sha.sha384,n.sha512=n.sha.sha512,n.ripemd160=n.ripemd.ripemd160},4495:(t,e,r)=>{"use strict";var n=r(212),i=r(9561);function f(){this.pending=null,this.pendingTotal=0,this.blockSize=this.constructor.blockSize,this.outSize=this.constructor.outSize,this.hmacStrength=this.constructor.hmacStrength,this.padLength=this.constructor.padLength/8,this.endian="big",this._delta8=this.blockSize/8,this._delta32=this.blockSize/32}e.BlockHash=f,f.prototype.update=function(t,e){if(t=n.toArray(t,e),this.pending?this.pending=this.pending.concat(t):this.pending=t,this.pendingTotal+=t.length,this.pending.length>=this._delta8){var r=(t=this.pending).length%this._delta8;this.pending=t.slice(t.length-r,t.length),0===this.pending.length&&(this.pending=null),t=n.join32(t,0,t.length-r,this.endian);for(var i=0;i>>24&255,n[i++]=t>>>16&255,n[i++]=t>>>8&255,n[i++]=255&t}else for(n[i++]=255&t,n[i++]=t>>>8&255,n[i++]=t>>>16&255,n[i++]=t>>>24&255,n[i++]=0,n[i++]=0,n[i++]=0,n[i++]=0,f=8;f{"use strict";var n=r(212),i=r(9561);function f(t,e,r){if(!(this instanceof f))return new f(t,e,r);this.Hash=t,this.blockSize=t.blockSize/8,this.outSize=t.outSize/8,this.inner=null,this.outer=null,this._init(n.toArray(e,r))}t.exports=f,f.prototype._init=function(t){t.length>this.blockSize&&(t=(new this.Hash).update(t).digest()),i(t.length<=this.blockSize);for(var e=t.length;e{"use strict";var n=r(212),i=r(4495),f=n.rotl32,o=n.sum32,s=n.sum32_3,a=n.sum32_4,d=i.BlockHash;function h(){if(!(this instanceof h))return new h;d.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.endian="little"}function c(t,e,r,n){return t<=15?e^r^n:t<=31?e&r|~e&n:t<=47?(e|~r)^n:t<=63?e&n|r&~n:e^(r|~n)}function u(t){return t<=15?0:t<=31?1518500249:t<=47?1859775393:t<=63?2400959708:2840853838}function l(t){return t<=15?1352829926:t<=31?1548603684:t<=47?1836072691:t<=63?2053994217:0}n.inherits(h,d),e.ripemd160=h,h.blockSize=512,h.outSize=160,h.hmacStrength=192,h.padLength=64,h.prototype._update=function(t,e){for(var r=this.h[0],n=this.h[1],i=this.h[2],d=this.h[3],h=this.h[4],y=r,v=n,w=i,_=d,A=h,S=0;S<80;S++){var M=o(f(a(r,c(S,n,i,d),t[b[S]+e],u(S)),g[S]),h);r=h,h=d,d=f(i,10),i=n,n=M,M=o(f(a(y,c(79-S,v,w,_),t[p[S]+e],l(S)),m[S]),A),y=A,A=_,_=f(w,10),w=v,v=M}M=s(this.h[1],i,_),this.h[1]=s(this.h[2],d,A),this.h[2]=s(this.h[3],h,y),this.h[3]=s(this.h[4],r,v),this.h[4]=s(this.h[0],n,w),this.h[0]=M},h.prototype._digest=function(t){return"hex"===t?n.toHex32(this.h,"little"):n.split32(this.h,"little")};var b=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],p=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],g=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],m=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]},5530:(t,e,r)=>{"use strict";e.sha1=r(5079),e.sha224=r(3823),e.sha256=r(8032),e.sha384=r(5328),e.sha512=r(168)},5079:(t,e,r)=>{"use strict";var n=r(212),i=r(4495),f=r(713),o=n.rotl32,s=n.sum32,a=n.sum32_5,d=f.ft_1,h=i.BlockHash,c=[1518500249,1859775393,2400959708,3395469782];function u(){if(!(this instanceof u))return new u;h.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.W=new Array(80)}n.inherits(u,h),t.exports=u,u.blockSize=512,u.outSize=160,u.hmacStrength=80,u.padLength=64,u.prototype._update=function(t,e){for(var r=this.W,n=0;n<16;n++)r[n]=t[e+n];for(;n{"use strict";var n=r(212),i=r(8032);function f(){if(!(this instanceof f))return new f;i.call(this),this.h=[3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428]}n.inherits(f,i),t.exports=f,f.blockSize=512,f.outSize=224,f.hmacStrength=192,f.padLength=64,f.prototype._digest=function(t){return"hex"===t?n.toHex32(this.h.slice(0,7),"big"):n.split32(this.h.slice(0,7),"big")}},8032:(t,e,r)=>{"use strict";var n=r(212),i=r(4495),f=r(713),o=r(9561),s=n.sum32,a=n.sum32_4,d=n.sum32_5,h=f.ch32,c=f.maj32,u=f.s0_256,l=f.s1_256,b=f.g0_256,p=f.g1_256,g=i.BlockHash,m=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];function y(){if(!(this instanceof y))return new y;g.call(this),this.h=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],this.k=m,this.W=new Array(64)}n.inherits(y,g),t.exports=y,y.blockSize=512,y.outSize=256,y.hmacStrength=192,y.padLength=64,y.prototype._update=function(t,e){for(var r=this.W,n=0;n<16;n++)r[n]=t[e+n];for(;n{"use strict";var n=r(212),i=r(168);function f(){if(!(this instanceof f))return new f;i.call(this),this.h=[3418070365,3238371032,1654270250,914150663,2438529370,812702999,355462360,4144912697,1731405415,4290775857,2394180231,1750603025,3675008525,1694076839,1203062813,3204075428]}n.inherits(f,i),t.exports=f,f.blockSize=1024,f.outSize=384,f.hmacStrength=192,f.padLength=128,f.prototype._digest=function(t){return"hex"===t?n.toHex32(this.h.slice(0,12),"big"):n.split32(this.h.slice(0,12),"big")}},168:(t,e,r)=>{"use strict";var n=r(212),i=r(4495),f=r(9561),o=n.rotr64_hi,s=n.rotr64_lo,a=n.shr64_hi,d=n.shr64_lo,h=n.sum64,c=n.sum64_hi,u=n.sum64_lo,l=n.sum64_4_hi,b=n.sum64_4_lo,p=n.sum64_5_hi,g=n.sum64_5_lo,m=i.BlockHash,y=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591];function v(){if(!(this instanceof v))return new v;m.call(this),this.h=[1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209],this.k=y,this.W=new Array(160)}function w(t,e,r,n,i){var f=t&r^~t&i;return f<0&&(f+=4294967296),f}function _(t,e,r,n,i,f){var o=e&n^~e&f;return o<0&&(o+=4294967296),o}function A(t,e,r,n,i){var f=t&r^t&i^r&i;return f<0&&(f+=4294967296),f}function S(t,e,r,n,i,f){var o=e&n^e&f^n&f;return o<0&&(o+=4294967296),o}function M(t,e){var r=o(t,e,28)^o(e,t,2)^o(e,t,7);return r<0&&(r+=4294967296),r}function E(t,e){var r=s(t,e,28)^s(e,t,2)^s(e,t,7);return r<0&&(r+=4294967296),r}function I(t,e){var r=s(t,e,14)^s(t,e,18)^s(e,t,9);return r<0&&(r+=4294967296),r}function T(t,e){var r=o(t,e,1)^o(t,e,8)^a(t,e,7);return r<0&&(r+=4294967296),r}function R(t,e){var r=s(t,e,1)^s(t,e,8)^d(t,e,7);return r<0&&(r+=4294967296),r}function P(t,e){var r=s(t,e,19)^s(e,t,29)^d(t,e,6);return r<0&&(r+=4294967296),r}n.inherits(v,m),t.exports=v,v.blockSize=1024,v.outSize=512,v.hmacStrength=192,v.padLength=128,v.prototype._prepareBlock=function(t,e){for(var r=this.W,n=0;n<32;n++)r[n]=t[e+n];for(;n{"use strict";var n=r(212).rotr32;function i(t,e,r){return t&e^~t&r}function f(t,e,r){return t&e^t&r^e&r}function o(t,e,r){return t^e^r}e.ft_1=function(t,e,r,n){return 0===t?i(e,r,n):1===t||3===t?o(e,r,n):2===t?f(e,r,n):void 0},e.ch32=i,e.maj32=f,e.p32=o,e.s0_256=function(t){return n(t,2)^n(t,13)^n(t,22)},e.s1_256=function(t){return n(t,6)^n(t,11)^n(t,25)},e.g0_256=function(t){return n(t,7)^n(t,18)^t>>>3},e.g1_256=function(t){return n(t,17)^n(t,19)^t>>>10}},212:(t,e,r)=>{"use strict";var n=r(9561),i=r(1285);function f(t,e){return 55296==(64512&t.charCodeAt(e))&&!(e<0||e+1>=t.length)&&56320==(64512&t.charCodeAt(e+1))}function o(t){return(t>>>24|t>>>8&65280|t<<8&16711680|(255&t)<<24)>>>0}function s(t){return 1===t.length?"0"+t:t}function a(t){return 7===t.length?"0"+t:6===t.length?"00"+t:5===t.length?"000"+t:4===t.length?"0000"+t:3===t.length?"00000"+t:2===t.length?"000000"+t:1===t.length?"0000000"+t:t}e.inherits=i,e.toArray=function(t,e){if(Array.isArray(t))return t.slice();if(!t)return[];var r=[];if("string"==typeof t)if(e){if("hex"===e)for((t=t.replace(/[^a-z0-9]+/gi,"")).length%2!=0&&(t="0"+t),i=0;i>6|192,r[n++]=63&o|128):f(t,i)?(o=65536+((1023&o)<<10)+(1023&t.charCodeAt(++i)),r[n++]=o>>18|240,r[n++]=o>>12&63|128,r[n++]=o>>6&63|128,r[n++]=63&o|128):(r[n++]=o>>12|224,r[n++]=o>>6&63|128,r[n++]=63&o|128)}else for(i=0;i>>0}return o},e.split32=function(t,e){for(var r=new Array(4*t.length),n=0,i=0;n>>24,r[i+1]=f>>>16&255,r[i+2]=f>>>8&255,r[i+3]=255&f):(r[i+3]=f>>>24,r[i+2]=f>>>16&255,r[i+1]=f>>>8&255,r[i]=255&f)}return r},e.rotr32=function(t,e){return t>>>e|t<<32-e},e.rotl32=function(t,e){return t<>>32-e},e.sum32=function(t,e){return t+e>>>0},e.sum32_3=function(t,e,r){return t+e+r>>>0},e.sum32_4=function(t,e,r,n){return t+e+r+n>>>0},e.sum32_5=function(t,e,r,n,i){return t+e+r+n+i>>>0},e.sum64=function(t,e,r,n){var i=t[e],f=n+t[e+1]>>>0,o=(f>>0,t[e+1]=f},e.sum64_hi=function(t,e,r,n){return(e+n>>>0>>0},e.sum64_lo=function(t,e,r,n){return e+n>>>0},e.sum64_4_hi=function(t,e,r,n,i,f,o,s){var a=0,d=e;return a+=(d=d+n>>>0)>>0)>>0)>>0},e.sum64_4_lo=function(t,e,r,n,i,f,o,s){return e+n+f+s>>>0},e.sum64_5_hi=function(t,e,r,n,i,f,o,s,a,d){var h=0,c=e;return h+=(c=c+n>>>0)>>0)>>0)>>0)>>0},e.sum64_5_lo=function(t,e,r,n,i,f,o,s,a,d){return e+n+f+s+d>>>0},e.rotr64_hi=function(t,e,r){return(e<<32-r|t>>>r)>>>0},e.rotr64_lo=function(t,e,r){return(t<<32-r|e>>>r)>>>0},e.shr64_hi=function(t,e,r){return t>>>r},e.shr64_lo=function(t,e,r){return(t<<32-r|e>>>r)>>>0}},8873:(t,e,r)=>{"use strict";var n=r(4485),i=r(3022),f=r(9561);function o(t){if(!(this instanceof o))return new o(t);this.hash=t.hash,this.predResist=!!t.predResist,this.outLen=this.hash.outSize,this.minEntropy=t.minEntropy||this.hash.hmacStrength,this._reseed=null,this.reseedInterval=null,this.K=null,this.V=null;var e=i.toArray(t.entropy,t.entropyEnc||"hex"),r=i.toArray(t.nonce,t.nonceEnc||"hex"),n=i.toArray(t.pers,t.persEnc||"hex");f(e.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._init(e,r,n)}t.exports=o,o.prototype._init=function(t,e,r){var n=t.concat(e).concat(r);this.K=new Array(this.outLen/8),this.V=new Array(this.outLen/8);for(var i=0;i=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._update(t.concat(r||[])),this._reseed=1},o.prototype.generate=function(t,e,r,n){if(this._reseed>this.reseedInterval)throw new Error("Reseed is required");"string"!=typeof e&&(n=r,r=e,e=null),r&&(r=i.toArray(r,n||"hex"),this._update(r));for(var f=[];f.length{e.read=function(t,e,r,n,i){var f,o,s=8*i-n-1,a=(1<>1,h=-7,c=r?i-1:0,u=r?-1:1,l=t[e+c];for(c+=u,f=l&(1<<-h)-1,l>>=-h,h+=s;h>0;f=256*f+t[e+c],c+=u,h-=8);for(o=f&(1<<-h)-1,f>>=-h,h+=n;h>0;o=256*o+t[e+c],c+=u,h-=8);if(0===f)f=1-d;else{if(f===a)return o?NaN:1/0*(l?-1:1);o+=Math.pow(2,n),f-=d}return(l?-1:1)*o*Math.pow(2,f-n)},e.write=function(t,e,r,n,i,f){var o,s,a,d=8*f-i-1,h=(1<>1,u=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,l=n?0:f-1,b=n?1:-1,p=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,o=h):(o=Math.floor(Math.log(e)/Math.LN2),e*(a=Math.pow(2,-o))<1&&(o--,a*=2),(e+=o+c>=1?u/a:u*Math.pow(2,1-c))*a>=2&&(o++,a/=2),o+c>=h?(s=0,o=h):o+c>=1?(s=(e*a-1)*Math.pow(2,i),o+=c):(s=e*Math.pow(2,c-1)*Math.pow(2,i),o=0));i>=8;t[r+l]=255&s,l+=b,s/=256,i-=8);for(o=o<0;t[r+l]=255&o,l+=b,o/=256,d-=8);t[r+l-b]|=128*p}},1285:t=>{"function"==typeof Object.create?t.exports=function(t,e){e&&(t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}))}:t.exports=function(t,e){if(e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}}},9561:t=>{function e(t,e){if(!t)throw new Error(e||"Assertion failed")}t.exports=e,e.equal=function(t,e,r){if(t!=e)throw new Error(r||"Assertion failed: "+t+" != "+e)}},3022:(t,e)=>{"use strict";var r=e;function n(t){return 1===t.length?"0"+t:t}function i(t){for(var e="",r=0;r>8,o=255&i;f?r.push(f,o):r.push(o)}return r},r.zero2=n,r.toHex=i,r.encode=function(t,e){return"hex"===e?i(t):t}},8743:(t,e,r)=>{var n=r(8834).lW;t.exports=function(t){return ArrayBuffer.isView(t)?n.from(t.buffer,t.byteOffset,t.byteLength):n.from(t)}},5477:()=>{},3196:()=>{},8087:()=>{},763:t=>{"use strict";t.exports={i8:"6.5.4"}}},e={};function r(n){var i=e[n];if(void 0!==i)return i.exports;var f=e[n]={id:n,loaded:!1,exports:{}};return t[n].call(f.exports,f,f.exports,r),f.loaded=!0,f.exports}r.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return r.d(e,{a:e}),e},r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.nmd=t=>(t.paths=[],t.children||(t.children=[]),t);var n={};(()=>{"use strict";r.r(n),r.d(n,{CODEC:()=>i,LocalForger:()=>ye,ProtocolsHash:()=>be,Uint8ArrayConsumer:()=>st,VERSION:()=>pe,decoders:()=>he,encoders:()=>ce,getCodec:()=>me,localForger:()=>ve,opMapping:()=>f,opMappingReverse:()=>o});const t=t=>t.reduce(((t,e)=>t+e.toString(16).padStart(2,"0")),""),e=(t,e=8)=>t.toString(16).padStart(e,"0");var i;!function(t){t.SECRET="secret",t.RAW="raw",t.TZ1="tz1",t.BRANCH="branch",t.ZARITH="zarith",t.PUBLIC_KEY="public_key",t.PKH="pkh",t.PKH_ARR="pkhArr",t.DELEGATE="delegate",t.SCRIPT="script",t.BALLOT_STATEMENT="ballotStmt",t.PROPOSAL="proposal",t.PROPOSAL_ARR="proposalArr",t.INT32="int32",t.INT16="int16",t.PARAMETERS="parameters",t.ADDRESS="address",t.SMART_CONTRACT_ADDRESS="smart_contract_address",t.SMART_ROLLUP_ADDRESS="smart_rollup_address",t.SMART_ROLLUP_COMMITMENT_HASH="smart_rollup_commitment_hash",t.VALUE="value",t.PADDED_BYTES="padded_bytes",t.SMART_ROLLUP_MESSAGE="smart_rollup_message",t.MANAGER="manager",t.BLOCK_PAYLOAD_HASH="blockPayloadHash",t.ENTRYPOINT="entrypoint",t.OPERATION="operation",t.OP_ACTIVATE_ACCOUNT="activate_account",t.OP_DELEGATION="delegation",t.OP_TRANSACTION="transaction",t.OP_ORIGINATION="origination",t.OP_BALLOT="ballot",t.OP_FAILING_NOOP="failing_noop",t.OP_ATTESTATION="attestation",t.OP_ENDORSEMENT="endorsement",t.OP_SEED_NONCE_REVELATION="seed_nonce_revelation",t.OP_REVEAL="reveal",t.OP_PROPOSALS="proposals",t.OP_REGISTER_GLOBAL_CONSTANT="register_global_constant",t.OP_TRANSFER_TICKET="transfer_ticket",t.BURN_LIMIT="burn_limit",t.OP_INCREASE_PAID_STORAGE="increase_paid_storage",t.OP_UPDATE_CONSENSUS_KEY="update_consensus_key",t.OP_DRAIN_DELEGATE="drain_delegate",t.DEPOSITS_LIMIT="deposits_limit",t.OP_SET_DEPOSITS_LIMIT="set_deposits_limit",t.OP_SMART_ROLLUP_ORIGINATE="smart_rollup_originate",t.PVM_KIND="pvm_kind",t.OP_SMART_ROLLUP_ADD_MESSAGES="smart_rollup_add_messages",t.OP_SMART_ROLLUP_EXECUTE_OUTBOX_MESSAGE="smart_rollup_execute_outbox_message"}(i||(i={}));const f={"00":"parameter","01":"storage","02":"code","03":"False","04":"Elt","05":"Left","06":"None","07":"Pair","08":"Right","09":"Some","0a":"True","0b":"Unit","0c":"PACK","0d":"UNPACK","0e":"BLAKE2B","0f":"SHA256",10:"SHA512",11:"ABS",12:"ADD",13:"AMOUNT",14:"AND",15:"BALANCE",16:"CAR",17:"CDR",18:"CHECK_SIGNATURE",19:"COMPARE","1a":"CONCAT","1b":"CONS","1c":"CREATE_ACCOUNT","1d":"CREATE_CONTRACT","1e":"IMPLICIT_ACCOUNT","1f":"DIP",20:"DROP",21:"DUP",22:"EDIV",23:"EMPTY_MAP",24:"EMPTY_SET",25:"EQ",26:"EXEC",27:"FAILWITH",28:"GE",29:"GET","2a":"GT","2b":"HASH_KEY","2c":"IF","2d":"IF_CONS","2e":"IF_LEFT","2f":"IF_NONE",30:"INT",31:"LAMBDA",32:"LE",33:"LEFT",34:"LOOP",35:"LSL",36:"LSR",37:"LT",38:"MAP",39:"MEM","3a":"MUL","3b":"NEG","3c":"NEQ","3d":"NIL","3e":"NONE","3f":"NOT",40:"NOW",41:"OR",42:"PAIR",43:"PUSH",44:"RIGHT",45:"SIZE",46:"SOME",47:"SOURCE",48:"SENDER",49:"SELF","4a":"STEPS_TO_QUOTA","4b":"SUB","4c":"SWAP","4d":"TRANSFER_TOKENS","4e":"SET_DELEGATE","4f":"UNIT",50:"UPDATE",51:"XOR",52:"ITER",53:"LOOP_LEFT",54:"ADDRESS",55:"CONTRACT",56:"ISNAT",57:"CAST",58:"RENAME",59:"bool","5a":"contract","5b":"int","5c":"key","5d":"key_hash","5e":"lambda","5f":"list",60:"map",61:"big_map",62:"nat",63:"option",64:"or",65:"pair",66:"set",67:"signature",68:"string",69:"bytes","6a":"mutez","6b":"timestamp","6c":"unit","6d":"operation","6e":"address","6f":"SLICE",70:"DIG",71:"DUG",72:"EMPTY_BIG_MAP",73:"APPLY",74:"chain_id",75:"CHAIN_ID",76:"LEVEL",77:"SELF_ADDRESS",78:"never",79:"NEVER","7a":"UNPAIR","7b":"VOTING_POWER","7c":"TOTAL_VOTING_POWER","7d":"KECCAK","7e":"SHA3","7f":"PAIRING_CHECK",80:"bls12_381_g1",81:"bls12_381_g2",82:"bls12_381_fr",83:"sapling_state",84:"sapling_transaction_deprecated",85:"SAPLING_EMPTY_STATE",86:"SAPLING_VERIFY_UPDATE",87:"ticket",88:"TICKET_DEPRECATED",89:"READ_TICKET","8a":"SPLIT_TICKET","8b":"JOIN_TICKETS","8c":"GET_AND_UPDATE","8d":"chest","8e":"chest_key","8f":"OPEN_CHEST",90:"VIEW",91:"view",92:"constant",93:"SUB_MUTEZ",94:"tx_rollup_l2_address",95:"MIN_BLOCK_TIME",96:"sapling_transaction",97:"EMIT",98:"Lambda_rec",99:"LAMBDA_REC","9a":"TICKET","9b":"BYTES","9c":"NAT"},o=(()=>{const t={};return Object.keys(f).forEach((e=>{t[f[e]]=e})),t})(),s={4:"activate_account",107:"reveal",110:"delegation",108:"transaction",109:"origination",6:"ballot",21:"attestation",1:"seed_nonce_revelation",5:"proposals",111:"register_global_constant",158:"transfer_ticket",112:"set_deposits_limit",113:"increase_paid_storage",114:"update_consensus_key",9:"drain_delegate",200:"smart_rollup_originate",201:"smart_rollup_add_messages",206:"smart_rollup_execute_outbox_message",17:"failing_noop"},a=(()=>{const t={};return Object.keys(s).forEach((r=>{const n="string"==typeof r?parseInt(r,10):r;t[s[n]]=e(n,2)})),t})(),d={"00":"default","01":"root","02":"do","03":"set_delegate","04":"remove_delegate","05":"deposit","06":"stake","07":"unstake","08":"finalize_unstake","09":"set_delegate_parameters"},h=(()=>{const t={};return Object.keys(d).forEach((e=>{t[d[e]]=e})),t})();var c=r(8834),u=(r(7728),r(6851),r(1395),r(4075)),l=r.n(u);class b extends Error{}class p extends b{}class g extends p{constructor(t,e){super(),this.address=t,this.errorDetail=e,this.name="InvalidAddressError",this.message=`Invalid address "${t}"`,this.message+=e?` ${e}.`:"."}}class m extends p{constructor(t,e){super(),this.blockHash=t,this.errorDetail=e,this.name="InvalidBlockHashError",this.message=`Invalid block hash "${t}"`,this.message+=e?` ${e}.`:"."}}class y extends p{constructor(t,e){super(),this.hexString=t,this.errorDetail=e,this.name="InvalidHexStringError",this.message=`Invalid hex string "${t}"`,this.message+=e?` ${e}.`:"."}}class v extends p{constructor(t,e){super(),this.publicKey=t,this.errorDetail=e,this.name="InvalidPublicKeyError",this.message=`Invalid public key "${t}"`,this.message+=e?` ${e}.`:"."}}class w extends p{constructor(t,e){super(),this.contractAddress=t,this.errorDetail=e,this.name="InvalidContractAddressError",this.message=`Invalid contract address "${t}"`,this.message+=e?` ${e}.`:"."}}class _ extends p{constructor(t,e){super(),this.keyHash=t,this.errorDetail=e,this.name="InvalidKeyHashError",this.message=`Invalid public key hash "${t}"`,this.message+=e?` ${e}.`:"."}}class A extends p{constructor(t,e){super(),this.operationKind=t,this.errorDetail=e,this.name="InvalidOperationKindError",this.message=`Invalid operation kind "${t}"`,this.message+=e?` ${e}.`:"."}}var S=/^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i,M=Math.ceil,E=Math.floor,I="[BigNumber Error] ",T=I+"Number primitive has more than 15 significant digits: ",R=1e14,P=14,L=9007199254740991,O=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],x=1e7,U=1e9;function N(t){var e=0|t;return t>0||t===e?e:e-1}function B(t){for(var e,r,n=1,i=t.length,f=t[0]+"";nd^r?1:-1;for(s=(a=i.length)<(d=f.length)?a:d,o=0;of[o]^r?1:-1;return a==d?0:a>d^r?1:-1}function D(t,e,r,n){if(tr||t!==E(t))throw Error(I+(n||"Argument")+("number"==typeof t?tr?" out of range: ":" not an integer: ":" not a primitive number: ")+String(t))}function C(t){var e=t.c.length-1;return N(t.e/P)==e&&t.c[e]%2!=0}function H(t,e){return(t.length>1?t.charAt(0)+"."+t.slice(1):t)+(e<0?"e":"e+")+e}function z(t,e,r){var n,i;if(e<0){for(i=r+".";++e;i+=r);t=i+t}else if(++e>(n=t.length)){for(i=r,e-=n;--e;i+=r);t+=i}else ev?u.c=u.e=null:t.e=10;a/=10,s++);return void(s>v?u.c=u.e=null:(u.e=s,u.c=[t]))}c=String(t)}else{if(!S.test(c=String(t)))return i(u,c,d);u.s=45==c.charCodeAt(0)?(c=c.slice(1),-1):1}(s=c.indexOf("."))>-1&&(c=c.replace(".","")),(a=c.search(/e/i))>0?(s<0&&(s=a),s+=+c.slice(a+1),c=c.substring(0,a)):s<0&&(s=c.length)}else{if(D(e,2,q.length,"Base"),10==e&&F)return V(u=new Z(t),b+u.e+1,p);if(c=String(t),d="number"==typeof t){if(0*t!=0)return i(u,c,d,e);if(u.s=1/t<0?(c=c.slice(1),-1):1,Z.DEBUG&&c.replace(/^0\.0*|\./,"").length>15)throw Error(T+t)}else u.s=45===c.charCodeAt(0)?(c=c.slice(1),-1):1;for(r=q.slice(0,e),s=a=0,h=c.length;as){s=h;continue}}else if(!o&&(c==c.toUpperCase()&&(c=c.toLowerCase())||c==c.toLowerCase()&&(c=c.toUpperCase()))){o=!0,a=-1,s=0;continue}return i(u,String(t),d,e)}d=!1,(s=(c=n(c,e,10,u.s)).indexOf("."))>-1?c=c.replace(".",""):s=c.length}for(a=0;48===c.charCodeAt(a);a++);for(h=c.length;48===c.charCodeAt(--h););if(c=c.slice(a,++h)){if(h-=a,d&&Z.DEBUG&&h>15&&(t>L||t!==E(t)))throw Error(T+u.s*t);if((s=s-a-1)>v)u.c=u.e=null;else if(s=m)?H(a,o):z(a,o,"0");else if(f=(t=V(new Z(t),e,r)).e,s=(a=B(t.c)).length,1==n||2==n&&(e<=f||f<=g)){for(;ss){if(--e>0)for(a+=".";e--;a+="0");}else if((e+=f-s)>0)for(f+1==s&&(a+=".");e--;a+="0");return t.s<0&&i?"-"+a:a}function G(t,e){for(var r,n,i=1,f=new Z(t[0]);i=10;i/=10,n++);return(r=n+r*P-1)>v?t.c=t.e=null:r=10;s/=10,i++);if((f=e-i)<0)f+=P,o=e,a=c[d=0],h=E(a/u[i-o-1]%10);else if((d=M((f+1)/P))>=c.length){if(!n)break t;for(;c.length<=d;c.push(0));a=h=0,i=1,o=(f%=P)-P+1}else{for(a=s=c[d],i=1;s>=10;s/=10,i++);h=(o=(f%=P)-P+i)<0?0:E(a/u[i-o-1]%10)}if(n=n||e<0||null!=c[d+1]||(o<0?a:a%u[i-o-1]),n=r<4?(h||n)&&(0==r||r==(t.s<0?3:2)):h>5||5==h&&(4==r||n||6==r&&(f>0?o>0?a/u[i-o]:0:c[d-1])%10&1||r==(t.s<0?8:7)),e<1||!c[0])return c.length=0,n?(e-=t.e+1,c[0]=u[(P-e%P)%P],t.e=-e||0):c[0]=t.e=0,t;if(0==f?(c.length=d,s=1,d--):(c.length=d+1,s=u[P-f],c[d]=o>0?E(a/u[i-o]%u[o])*s:0),n)for(;;){if(0==d){for(f=1,o=c[0];o>=10;o/=10,f++);for(o=c[0]+=s,s=1;o>=10;o/=10,s++);f!=s&&(t.e++,c[0]==R&&(c[0]=1));break}if(c[d]+=s,c[d]!=R)break;c[d--]=0,s=1}for(f=c.length;0===c[--f];c.pop());}t.e>v?t.c=t.e=null:t.e=m?H(e,r):z(e,r,"0"),t.s<0?"-"+e:e)}return Z.clone=t,Z.ROUND_UP=0,Z.ROUND_DOWN=1,Z.ROUND_CEIL=2,Z.ROUND_FLOOR=3,Z.ROUND_HALF_UP=4,Z.ROUND_HALF_DOWN=5,Z.ROUND_HALF_EVEN=6,Z.ROUND_HALF_CEIL=7,Z.ROUND_HALF_FLOOR=8,Z.EUCLID=9,Z.config=Z.set=function(t){var e,r;if(null!=t){if("object"!=typeof t)throw Error(I+"Object expected: "+t);if(t.hasOwnProperty(e="DECIMAL_PLACES")&&(D(r=t[e],0,U,e),b=r),t.hasOwnProperty(e="ROUNDING_MODE")&&(D(r=t[e],0,8,e),p=r),t.hasOwnProperty(e="EXPONENTIAL_AT")&&((r=t[e])&&r.pop?(D(r[0],-U,0,e),D(r[1],0,U,e),g=r[0],m=r[1]):(D(r,-U,U,e),g=-(m=r<0?-r:r))),t.hasOwnProperty(e="RANGE"))if((r=t[e])&&r.pop)D(r[0],-U,-1,e),D(r[1],1,U,e),y=r[0],v=r[1];else{if(D(r,-U,U,e),!r)throw Error(I+e+" cannot be zero: "+r);y=-(v=r<0?-r:r)}if(t.hasOwnProperty(e="CRYPTO")){if((r=t[e])!==!!r)throw Error(I+e+" not true or false: "+r);if(r){if("undefined"==typeof crypto||!crypto||!crypto.getRandomValues&&!crypto.randomBytes)throw w=!r,Error(I+"crypto unavailable");w=r}else w=r}if(t.hasOwnProperty(e="MODULO_MODE")&&(D(r=t[e],0,9,e),_=r),t.hasOwnProperty(e="POW_PRECISION")&&(D(r=t[e],0,U,e),A=r),t.hasOwnProperty(e="FORMAT")){if("object"!=typeof(r=t[e]))throw Error(I+e+" not an object: "+r);K=r}if(t.hasOwnProperty(e="ALPHABET")){if("string"!=typeof(r=t[e])||/^.?$|[+\-.\s]|(.).*\1/.test(r))throw Error(I+e+" invalid: "+r);F="0123456789"==r.slice(0,10),q=r}}return{DECIMAL_PLACES:b,ROUNDING_MODE:p,EXPONENTIAL_AT:[g,m],RANGE:[y,v],CRYPTO:w,MODULO_MODE:_,POW_PRECISION:A,FORMAT:K,ALPHABET:q}},Z.isBigNumber=function(t){if(!t||!0!==t._isBigNumber)return!1;if(!Z.DEBUG)return!0;var e,r,n=t.c,i=t.e,f=t.s;t:if("[object Array]"=={}.toString.call(n)){if((1===f||-1===f)&&i>=-U&&i<=U&&i===E(i)){if(0===n[0]){if(0===i&&1===n.length)return!0;break t}if((e=(i+1)%P)<1&&(e+=P),String(n[0]).length==e){for(e=0;e=R||r!==E(r))break t;if(0!==r)return!0}}}else if(null===n&&null===i&&(null===f||1===f||-1===f))return!0;throw Error(I+"Invalid BigNumber: "+t)},Z.maximum=Z.max=function(){return G(arguments,-1)},Z.minimum=Z.min=function(){return G(arguments,1)},Z.random=(f=9007199254740992,o=Math.random()*f&2097151?function(){return E(Math.random()*f)}:function(){return 8388608*(1073741824*Math.random()|0)+(8388608*Math.random()|0)},function(t){var e,r,n,i,f,s=0,a=[],d=new Z(l);if(null==t?t=b:D(t,0,U),i=M(t/P),w)if(crypto.getRandomValues){for(e=crypto.getRandomValues(new Uint32Array(i*=2));s>>11))>=9e15?(r=crypto.getRandomValues(new Uint32Array(2)),e[s]=r[0],e[s+1]=r[1]):(a.push(f%1e14),s+=2);s=i/2}else{if(!crypto.randomBytes)throw w=!1,Error(I+"crypto unavailable");for(e=crypto.randomBytes(i*=7);s=9e15?crypto.randomBytes(7).copy(e,s):(a.push(f%1e14),s+=7);s=i/7}if(!w)for(;s=10;f/=10,s++);sr-1&&(null==o[i+1]&&(o[i+1]=0),o[i+1]+=o[i]/r|0,o[i]%=r)}return o.reverse()}return function(n,i,f,o,s){var a,d,h,c,u,l,g,m,y=n.indexOf("."),v=b,w=p;for(y>=0&&(c=A,A=0,n=n.replace(".",""),l=(m=new Z(i)).pow(n.length-y),A=c,m.c=e(z(B(l.c),l.e,"0"),10,f,t),m.e=m.c.length),h=c=(g=e(n,i,f,s?(a=q,t):(a=t,q))).length;0==g[--c];g.pop());if(!g[0])return a.charAt(0);if(y<0?--h:(l.c=g,l.e=h,l.s=o,g=(l=r(l,m,v,w,f)).c,u=l.r,h=l.e),y=g[d=h+v+1],c=f/2,u=u||d<0||null!=g[d+1],u=w<4?(null!=y||u)&&(0==w||w==(l.s<0?3:2)):y>c||y==c&&(4==w||u||6==w&&1&g[d-1]||w==(l.s<0?8:7)),d<1||!g[0])n=u?z(a.charAt(1),-v,a.charAt(0)):a.charAt(0);else{if(g.length=d,u)for(--f;++g[--d]>f;)g[d]=0,d||(++h,g=[1].concat(g));for(c=g.length;!g[--c];);for(y=0,n="";y<=c;n+=a.charAt(g[y++]));n=z(n,h,a.charAt(0))}return n}}(),r=function(){function t(t,e,r){var n,i,f,o,s=0,a=t.length,d=e%x,h=e/x|0;for(t=t.slice();a--;)s=((i=d*(f=t[a]%x)+(n=h*f+(o=t[a]/x|0)*d)%x*x+s)/r|0)+(n/x|0)+h*o,t[a]=i%r;return s&&(t=[s].concat(t)),t}function e(t,e,r,n){var i,f;if(r!=n)f=r>n?1:-1;else for(i=f=0;ie[i]?1:-1;break}return f}function r(t,e,r,n){for(var i=0;r--;)t[r]-=i,i=t[r]1;t.splice(0,1));}return function(n,i,f,o,s){var a,d,h,c,u,l,b,p,g,m,y,v,w,_,A,S,M,I=n.s==i.s?1:-1,T=n.c,L=i.c;if(!(T&&T[0]&&L&&L[0]))return new Z(n.s&&i.s&&(T?!L||T[0]!=L[0]:L)?T&&0==T[0]||!L?0*I:I/0:NaN);for(g=(p=new Z(I)).c=[],I=f+(d=n.e-i.e)+1,s||(s=R,d=N(n.e/P)-N(i.e/P),I=I/P|0),h=0;L[h]==(T[h]||0);h++);if(L[h]>(T[h]||0)&&d--,I<0)g.push(1),c=!0;else{for(_=T.length,S=L.length,h=0,I+=2,(u=E(s/(L[0]+1)))>1&&(L=t(L,u,s),T=t(T,u,s),S=L.length,_=T.length),w=S,y=(m=T.slice(0,S)).length;y=s/2&&A++;do{if(u=0,(a=e(L,m,S,y))<0){if(v=m[0],S!=y&&(v=v*s+(m[1]||0)),(u=E(v/A))>1)for(u>=s&&(u=s-1),b=(l=t(L,u,s)).length,y=m.length;1==e(l,m,b,y);)u--,r(l,S=10;I/=10,h++);V(p,f+(p.e=h+d*P-1)+1,o,c)}else p.e=d,p.r=+c;return p}}(),s=/^(-?)0([xbo])(?=\w[\w.]*$)/i,a=/^([^.]+)\.$/,d=/^\.([^.]+)$/,h=/^-?(Infinity|NaN)$/,c=/^\s*\+(?=[\w.])|^\s+|\s+$/g,i=function(t,e,r,n){var i,f=r?e:e.replace(c,"");if(h.test(f))t.s=isNaN(f)?null:f<0?-1:1;else{if(!r&&(f=f.replace(s,(function(t,e,r){return i="x"==(r=r.toLowerCase())?16:"b"==r?2:8,n&&n!=i?t:e})),n&&(i=n,f=f.replace(a,"$1").replace(d,"0.$1")),e!=f))return new Z(f,i);if(Z.DEBUG)throw Error(I+"Not a"+(n?" base "+n:"")+" number: "+e);t.s=null}t.c=t.e=null},u.absoluteValue=u.abs=function(){var t=new Z(this);return t.s<0&&(t.s=1),t},u.comparedTo=function(t,e){return k(this,new Z(t,e))},u.decimalPlaces=u.dp=function(t,e){var r,n,i,f=this;if(null!=t)return D(t,0,U),null==e?e=p:D(e,0,8),V(new Z(f),t+f.e+1,e);if(!(r=f.c))return null;if(n=((i=r.length-1)-N(this.e/P))*P,i=r[i])for(;i%10==0;i/=10,n--);return n<0&&(n=0),n},u.dividedBy=u.div=function(t,e){return r(this,new Z(t,e),b,p)},u.dividedToIntegerBy=u.idiv=function(t,e){return r(this,new Z(t,e),0,1)},u.exponentiatedBy=u.pow=function(t,e){var r,n,i,f,o,s,a,d,h=this;if((t=new Z(t)).c&&!t.isInteger())throw Error(I+"Exponent not an integer: "+Y(t));if(null!=e&&(e=new Z(e)),o=t.e>14,!h.c||!h.c[0]||1==h.c[0]&&!h.e&&1==h.c.length||!t.c||!t.c[0])return d=new Z(Math.pow(+Y(h),o?t.s*(2-C(t)):+Y(t))),e?d.mod(e):d;if(s=t.s<0,e){if(e.c?!e.c[0]:!e.s)return new Z(NaN);(n=!s&&h.isInteger()&&e.isInteger())&&(h=h.mod(e))}else{if(t.e>9&&(h.e>0||h.e<-1||(0==h.e?h.c[0]>1||o&&h.c[1]>=24e7:h.c[0]<8e13||o&&h.c[0]<=9999975e7)))return f=h.s<0&&C(t)?-0:0,h.e>-1&&(f=1/f),new Z(s?1/f:f);A&&(f=M(A/P+2))}for(o?(r=new Z(.5),s&&(t.s=1),a=C(t)):a=(i=Math.abs(+Y(t)))%2,d=new Z(l);;){if(a){if(!(d=d.times(h)).c)break;f?d.c.length>f&&(d.c.length=f):n&&(d=d.mod(e))}if(i){if(0===(i=E(i/2)))break;a=i%2}else if(V(t=t.times(r),t.e+1,1),t.e>14)a=C(t);else{if(0==(i=+Y(t)))break;a=i%2}h=h.times(h),f?h.c&&h.c.length>f&&(h.c.length=f):n&&(h=h.mod(e))}return n?d:(s&&(d=l.div(d)),e?d.mod(e):f?V(d,A,p,void 0):d)},u.integerValue=function(t){var e=new Z(this);return null==t?t=p:D(t,0,8),V(e,e.e+1,t)},u.isEqualTo=u.eq=function(t,e){return 0===k(this,new Z(t,e))},u.isFinite=function(){return!!this.c},u.isGreaterThan=u.gt=function(t,e){return k(this,new Z(t,e))>0},u.isGreaterThanOrEqualTo=u.gte=function(t,e){return 1===(e=k(this,new Z(t,e)))||0===e},u.isInteger=function(){return!!this.c&&N(this.e/P)>this.c.length-2},u.isLessThan=u.lt=function(t,e){return k(this,new Z(t,e))<0},u.isLessThanOrEqualTo=u.lte=function(t,e){return-1===(e=k(this,new Z(t,e)))||0===e},u.isNaN=function(){return!this.s},u.isNegative=function(){return this.s<0},u.isPositive=function(){return this.s>0},u.isZero=function(){return!!this.c&&0==this.c[0]},u.minus=function(t,e){var r,n,i,f,o=this,s=o.s;if(e=(t=new Z(t,e)).s,!s||!e)return new Z(NaN);if(s!=e)return t.s=-e,o.plus(t);var a=o.e/P,d=t.e/P,h=o.c,c=t.c;if(!a||!d){if(!h||!c)return h?(t.s=-e,t):new Z(c?o:NaN);if(!h[0]||!c[0])return c[0]?(t.s=-e,t):new Z(h[0]?o:3==p?-0:0)}if(a=N(a),d=N(d),h=h.slice(),s=a-d){for((f=s<0)?(s=-s,i=h):(d=a,i=c),i.reverse(),e=s;e--;i.push(0));i.reverse()}else for(n=(f=(s=h.length)<(e=c.length))?s:e,s=e=0;e0)for(;e--;h[r++]=0);for(e=R-1;n>s;){if(h[--n]=0;){for(r=0,u=v[i]%g,l=v[i]/g|0,f=i+(o=a);f>i;)r=((d=u*(d=y[--o]%g)+(s=l*d+(h=y[o]/g|0)*u)%g*g+b[f]+r)/p|0)+(s/g|0)+l*h,b[f--]=d%p;b[f]=r}return r?++n:b.splice(0,1),$(t,b,n)},u.negated=function(){var t=new Z(this);return t.s=-t.s||null,t},u.plus=function(t,e){var r,n=this,i=n.s;if(e=(t=new Z(t,e)).s,!i||!e)return new Z(NaN);if(i!=e)return t.s=-e,n.minus(t);var f=n.e/P,o=t.e/P,s=n.c,a=t.c;if(!f||!o){if(!s||!a)return new Z(i/0);if(!s[0]||!a[0])return a[0]?t:new Z(s[0]?n:0*i)}if(f=N(f),o=N(o),s=s.slice(),i=f-o){for(i>0?(o=f,r=a):(i=-i,r=s),r.reverse();i--;r.push(0));r.reverse()}for((i=s.length)-(e=a.length)<0&&(r=a,a=s,s=r,e=i),i=0;e;)i=(s[--e]=s[e]+a[e]+i)/R|0,s[e]=R===s[e]?0:s[e]%R;return i&&(s=[i].concat(s),++o),$(t,s,o)},u.precision=u.sd=function(t,e){var r,n,i,f=this;if(null!=t&&t!==!!t)return D(t,1,U),null==e?e=p:D(e,0,8),V(new Z(f),t,e);if(!(r=f.c))return null;if(n=(i=r.length-1)*P+1,i=r[i]){for(;i%10==0;i/=10,n--);for(i=r[0];i>=10;i/=10,n++);}return t&&f.e+1>n&&(n=f.e+1),n},u.shiftedBy=function(t){return D(t,-9007199254740991,L),this.times("1e"+t)},u.squareRoot=u.sqrt=function(){var t,e,n,i,f,o=this,s=o.c,a=o.s,d=o.e,h=b+4,c=new Z("0.5");if(1!==a||!s||!s[0])return new Z(!a||a<0&&(!s||s[0])?NaN:s?o:1/0);if(0==(a=Math.sqrt(+Y(o)))||a==1/0?(((e=B(s)).length+d)%2==0&&(e+="0"),a=Math.sqrt(+e),d=N((d+1)/2)-(d<0||d%2),n=new Z(e=a==1/0?"5e"+d:(e=a.toExponential()).slice(0,e.indexOf("e")+1)+d)):n=new Z(a+""),n.c[0])for((a=(d=n.e)+h)<3&&(a=0);;)if(f=n,n=c.times(f.plus(r(o,f,h,1))),B(f.c).slice(0,a)===(e=B(n.c)).slice(0,a)){if(n.e0&&b>0){for(f=b%s||s,h=l.substr(0,f);f0&&(h+=d+l.slice(f)),u&&(h="-"+h)}n=c?h+(r.decimalSeparator||"")+((a=+r.fractionGroupSize)?c.replace(new RegExp("\\d{"+a+"}\\B","g"),"$&"+(r.fractionGroupSeparator||"")):c):h}return(r.prefix||"")+n+(r.suffix||"")},u.toFraction=function(t){var e,n,i,f,o,s,a,d,h,c,u,b,g=this,m=g.c;if(null!=t&&(!(a=new Z(t)).isInteger()&&(a.c||1!==a.s)||a.lt(l)))throw Error(I+"Argument "+(a.isInteger()?"out of range: ":"not an integer: ")+Y(a));if(!m)return new Z(g);for(e=new Z(l),h=n=new Z(l),i=d=new Z(l),b=B(m),o=e.e=b.length-g.e-1,e.c[0]=O[(s=o%P)<0?P+s:s],t=!t||a.comparedTo(e)>0?o>0?e:h:a,s=v,v=1/0,a=new Z(b),d.c[0]=0;c=r(a,e,0,1),1!=(f=n.plus(c.times(i))).comparedTo(t);)n=i,i=f,h=d.plus(c.times(f=h)),d=f,e=a.minus(c.times(f=e)),a=f;return f=r(t.minus(n),i,0,1),d=d.plus(f.times(h)),n=n.plus(f.times(i)),d.s=h.s=g.s,u=r(h,i,o*=2,p).minus(g).abs().comparedTo(r(d,n,o,p).minus(g).abs())<1?[h,i]:[d,n],v=s,u},u.toNumber=function(){return+Y(this)},u.toPrecision=function(t,e){return null!=t&&D(t,1,U),j(this,t,e,2)},u.toString=function(t){var e,r=this,i=r.s,f=r.e;return null===f?i?(e="Infinity",i<0&&(e="-"+e)):e="NaN":(null==t?e=f<=g||f>=m?H(B(r.c),f):z(B(r.c),f,"0"):10===t&&F?e=z(B((r=V(new Z(r),b+f+1,p)).c),r.e,"0"):(D(t,2,q.length,"Base"),e=n(z(B(r.c),f,"0"),10,t,i,!0)),i<0&&r.c[0]&&(e="-"+e)),e},u.valueOf=u.toJSON=function(){return Y(this)},u._isBigNumber=!0,u[Symbol.toStringTag]="BigNumber",u[Symbol.for("nodejs.util.inspect.custom")]=u.valueOf,null!=e&&Z.set(e),Z}();const q=K;var F;r(7554),r(8743),function(t){t.TZ1="tz1",t.TZ2="tz2",t.TZ3="tz3",t.TZ4="tz4",t.KT="KT",t.KT1="KT1",t.EDSK2="edsk2",t.SPSK="spsk",t.P2SK="p2sk",t.EDPK="edpk",t.SPPK="sppk",t.P2PK="p2pk",t.BLPK="BLpk",t.EDESK="edesk",t.SPESK="spesk",t.P2ESK="p2esk",t.EDSK="edsk",t.EDSIG="edsig",t.SPSIG="spsig",t.P2SIG="p2sig",t.SIG="sig",t.NET="Net",t.NCE="nce",t.B="B",t.O="o",t.LO="Lo",t.LLO="LLo",t.P="P",t.CO="Co",t.ID="id",t.EXPR="expr",t.TZ="TZ",t.VH="vh",t.SASK="sask",t.ZET1="zet1",t.SR1="sr1",t.SRC1="src1"}(F||(F={}));const Z={[F.TZ1]:new Uint8Array([6,161,159]),[F.TZ2]:new Uint8Array([6,161,161]),[F.TZ3]:new Uint8Array([6,161,164]),[F.TZ4]:new Uint8Array([6,161,166]),[F.KT]:new Uint8Array([2,90,121]),[F.KT1]:new Uint8Array([2,90,121]),[F.EDSK]:new Uint8Array([43,246,78,7]),[F.EDSK2]:new Uint8Array([13,15,58,7]),[F.SPSK]:new Uint8Array([17,162,224,201]),[F.P2SK]:new Uint8Array([16,81,238,189]),[F.EDPK]:new Uint8Array([13,15,37,217]),[F.SPPK]:new Uint8Array([3,254,226,86]),[F.P2PK]:new Uint8Array([3,178,139,127]),[F.BLPK]:new Uint8Array([6,149,135,204]),[F.EDESK]:new Uint8Array([7,90,60,179,41]),[F.SPESK]:new Uint8Array([9,237,241,174,150]),[F.P2ESK]:new Uint8Array([9,48,57,115,171]),[F.EDSIG]:new Uint8Array([9,245,205,134,18]),[F.SPSIG]:new Uint8Array([13,115,101,19,63]),[F.P2SIG]:new Uint8Array([54,240,44,52]),[F.SIG]:new Uint8Array([4,130,43]),[F.NET]:new Uint8Array([87,82,0]),[F.NCE]:new Uint8Array([69,220,169]),[F.B]:new Uint8Array([1,52]),[F.O]:new Uint8Array([5,116]),[F.LO]:new Uint8Array([133,233]),[F.LLO]:new Uint8Array([29,159,109]),[F.P]:new Uint8Array([2,170]),[F.CO]:new Uint8Array([79,179]),[F.ID]:new Uint8Array([153,103]),[F.EXPR]:new Uint8Array([13,44,64,27]),[F.TZ]:new Uint8Array([2,90,121]),[F.VH]:new Uint8Array([1,106,242]),[F.SASK]:new Uint8Array([11,237,20,92]),[F.ZET1]:new Uint8Array([18,71,40,223]),[F.SR1]:new Uint8Array([6,124,117]),[F.SRC1]:new Uint8Array([17,165,134,138])},j={[F.TZ1]:20,[F.TZ2]:20,[F.TZ3]:20,[F.TZ4]:20,[F.KT]:20,[F.KT1]:20,[F.EDPK]:32,[F.SPPK]:33,[F.P2PK]:33,[F.BLPK]:48,[F.EDSIG]:64,[F.SPSIG]:64,[F.P2SIG]:64,[F.SIG]:64,[F.NET]:4,[F.B]:32,[F.P]:32,[F.O]:32,[F.VH]:32,[F.SASK]:169,[F.ZET1]:43,[F.SR1]:20,[F.SRC1]:32};var G;!function(t){t[t.NO_PREFIX_MATCHED=0]="NO_PREFIX_MATCHED",t[t.INVALID_CHECKSUM=1]="INVALID_CHECKSUM",t[t.INVALID_LENGTH=2]="INVALID_LENGTH",t[t.VALID=3]="VALID"}(G||(G={})),F.TZ1,F.TZ2,F.TZ3,F.TZ4,F.KT1,F.EDSIG,F.P2SIG,F.SPSIG,F.SIG,F.EDPK,F.SPPK,F.P2PK,F.BLPK,F.O,F.P;const $=[F.B];function V(t){switch(t){case G.NO_PREFIX_MATCHED:return"with unsupported prefix";case G.INVALID_CHECKSUM:return"failed checksum";case G.INVALID_LENGTH:return"with incorrect length";default:return""}}F.SR1;class Y extends p{constructor(t,e){super(),this.operation=t,this.errorDetail=e,this.name="InvalidOperationSchemaError",this.message="Invalid operation content recevied",e&&(this.message+=` ${e}.`)}}class X extends p{constructor(t){super(),this.entrypoint=t,this.name="OversizedEntryPointError",this.message=`Invalid entrypoint length "${t.length}", maximum length is "31".`}}class W extends p{constructor(t){super(),this.ballotValue=t,this.name="InvalidBallotValueError",this.message=`Invalid ballot value "${t}" expecting one of the following: "yay", "nay", "pass".`}}class J extends p{constructor(t){super(),this.ballotValue=t,this.name="DecodeBallotValueError",this.message=`Invalid ballot value "${t}", cannot be decoded.`}}class Q extends p{constructor(t){super(),this.value=t,this.name="UnexpectedMichelsonValueError",this.message=`Invalid Michelson value "${t}", unalbe to encode.`}}class tt extends p{constructor(t){super(),this.message=t,this.name="OperationDecodingError"}}class et extends p{constructor(t){super(),this.message=t,this.name="OperationEncodingError"}}class rt extends p{constructor(t){super(),this.op=t,this.name="UnsupportedOperationError",this.message=`Unsupported operation "${t}", can submit an issue on our github for feature request.`}}class nt extends p{constructor(t){super(),this.pvm=t,this.name="UnsupportedPvmKindError",this.message=`Invalid Pvm kind "${t}" expecting either "arith" or "wasm_2_0_0".`}}class it extends p{constructor(t){super(),this.pvm=t,this.name="DecodePvmKindError",this.message=`Invalid Pvm kind "${t}", cannot be decoded.`}}class ft extends p{constructor(t,e){super(),this.address=t,this.errorDetail=e,this.name="InvalidSmartRollupAddress",this.message=`Invalid smart rollup address "${t}"`,e&&(this.message+=` ${e}.`)}}class ot extends p{constructor(t,e){super(),this.hash=t,this.errorDetail=e,this.name="InvalidSmartRollupCommitmentHashError",this.message=`Invalid smart rollup commitment hash "${t}"`,e&&(this.message+=` ${e}.`)}}class st{static fromHexString(t){const e=t.toLowerCase();if(/^(([a-f]|\d){2})*$/.test(e)){const t=new Uint8Array((e.match(/([a-z]|\d){2}/g)||[]).map((t=>parseInt(t,16))));return new st(t)}throw new y(e)}constructor(t,e=0){this.arr=t,this.offset=e}consume(t){const e=this.arr.subarray(this.offset,this.offset+t);return this.offset+=t,e}get(t){return this.arr[this.offset+t]}length(){return this.arr.length-this.offset}slice(t,e){return new st(this.arr.slice(t,e))}}var at=r(8834).lW;const dt=t=>{if(Array.isArray(t)){const r=t.map((t=>dt(t))).join(""),n=r.length/2;return`02${e(n)}${r}`}if((t=>"prim"in t)(t))return yt(t);if((t=>"bytes"in t&&"string"==typeof t.bytes)(t))return ut(t);if((t=>"string"in t&&"string"==typeof t.string)(t))return bt(t);if((t=>"int"in t&&"string"==typeof t.int)(t))return gt(t);throw new Q(JSON.stringify(t))},ht=t=>{const e=t.consume(1);switch(e[0]){case 10:return lt(t);case 1:return pt(t);case 0:return mt(t);case 2:{const e=new st(ct(t)),r=[];for(;e.length()>0;)r.push(ht(e));return r}default:return vt(t,e)}},ct=(t,e=4)=>{const r=t.consume(e),n=parseInt(at.from(r).toString("hex"),16);return t.consume(n)},ut=t=>{if(!/^([A-Fa-f0-9]{2})*$/.test(t.bytes))throw new y(t.bytes);const r=t.bytes.length/2;return`0a${e(r)}${t.bytes}`},lt=t=>{const e=ct(t);return{bytes:at.from(e).toString("hex")}},bt=t=>{const r=at.from(t.string,"utf8").toString("hex"),n=r.length/2;return`01${e(n)}${r}`},pt=t=>{const e=ct(t);return{string:at.from(e).toString("utf8")}},gt=({int:t})=>{const e=new K(t,10),r="-"===e.toString(2)[0]?"1":"0",n=e.toString(2).replace(/-/g,""),i=n.length<=6?6:(n.length-6)%7?n.length+7-(n.length-6)%7:n.length,f=n.padStart(i,"0").match(/\d{6,7}/g).reverse();return f[0]=r+f[0],`00${f.map(((t,e)=>parseInt((e===f.length-1?"0":"1")+t,2).toString(16).padStart(2,"0"))).join("")}`},mt=t=>{let e=t.consume(1)[0];const r=[];for(;128&e;)r.push(e),e=t.consume(1)[0];r.push(e);const n=!!(64&r[0]);r[0]=127&r[0];const i=r.map(((t,e)=>t.toString(2).slice(0===e?-6:-7).padStart(0===e?6:7,"0"))).reverse();let f=new K(i.join(""),2);return n&&(f=f.times(-1)),{int:f.toFixed()}},yt=t=>{const r=+Array.isArray(t.annots),n=Array.isArray(t.args)?t.args.length:0,i=e(Math.min(2*n+r+3,9),2),f=o[t.prim];let s=(t.args||[]).map((t=>dt(t))).join("");const a=Array.isArray(t.annots)?At(t.annots):"";return"LAMBDA"!==t.prim&&"LAMBDA_REC"!==t.prim||!n||(s=e(s.length/2)+s+e(0)),("pair"===t.prim||"Pair"===t.prim)&&n>2&&(s=""===a?e(s.length/2)+s+e(0):e(s.length/2)+s),"view"===t.prim&&t.args&&(s=e(s.length/2)+s+e(0)),`${i}${f}${s}${a}`},vt=(t,e)=>{const r=(e[0]-3)%2==1;let n=Math.floor((e[0]-3)/2);const i=t.consume(1)[0].toString(16).padStart(2,"0"),o={prim:f[i]};if("LAMBDA"!==f[i]&&"LAMBDA_REC"!==f[i]||t.consume(4),"view"===f[i])return 0!=n?wt(t,o):o;let s,a;("pair"===f[i]||"Pair"===f[i])&&n>2&&(s=_t(t),n=0,a=St(t));const d=new Array(n).fill(0).map((()=>ht(t)));return"LAMBDA"!==f[i]&&"LAMBDA_REC"!==f[i]||t.consume(4),s?o.args=s:d.length&&(o.args=d),a&&""!==a[0]?o.annots=a:r&&(o.annots=St(t)),o},wt=(t,e)=>(t.consume(4),e.args=new Array(4).fill(0).map((()=>ht(t))),t.consume(4),e),_t=t=>{const e=new st(ct(t)),r=[];for(;e.length()>0;)r.push(ht(e));return r},At=t=>{const r=t.map((t=>at.from(t,"utf8").toString("hex"))).join("20"),n=r.length/2;return`${e(n)}${r}`},St=t=>{const e=t.consume(4),r=parseInt(at.from(e).toString("hex"),16),n=t.consume(r);return at.from(n).toString("hex").split("20").map((t=>at.from(t,"hex").toString("utf8")))};var Mt=r(8834).lW;const Et=t=>e=>{return(t=>{const e=[];return t.forEach((t=>{const r=`00${t.toString(16)}`.slice(-2);e.push(r)})),e.join("")})(Mt.from((r=e,n=Z[t],l().decode(r).slice(n.length))));var r,n},It=t=>e=>function(t,e){const r="string"==typeof t?Uint8Array.from(c.lW.from(t,"hex")):t,n=new Uint8Array(e.length+r.length);return n.set(e),n.set(r,e.length),l().encode(c.lW.from(n.buffer))}(e.consume(j[t]),Z[t]),Tt=It(F.TZ1),Rt=It(F.B),Pt=t=>{const e=t.consume(1);return 0===e[0]?It(F.TZ1)(t):1===e[0]?It(F.TZ2)(t):2===e[0]?It(F.TZ3)(t):void 0},Lt=Et(F.B),Ot=Et(F.TZ1),xt=t=>t?"ff":"00",Ut=t=>Et(F.P)(t),Nt=t=>It(F.P)(t),Bt=t=>255===t.consume(1)[0],kt=t=>{switch(t.substring(0,3)){case F.TZ1:return"00"+Et(F.TZ1)(t);case F.TZ2:return"01"+Et(F.TZ2)(t);case F.TZ3:return"02"+Et(F.TZ3)(t);case F.TZ4:return"03"+Et(F.TZ4)(t);default:throw new _(t,V(G.NO_PREFIX_MATCHED)+` expecting one for the following "${F.TZ1}", "${F.TZ2}", "${F.TZ3}" or "${F.TZ4}".`)}},Dt=t=>{const e=[];let r=new q(t,10);if(r.isNaN())throw new TypeError(`Invalid zarith number ${t}`);for(;;){if(r.lt(128)){r.lt(16)&&e.push("0"),e.push(r.toString(16));break}{let t=r.mod(128);r=r.minus(t),r=r.dividedBy(128),t=t.plus(128),e.push(t.toString(16))}}return e.join("")},Ct=t=>{let e=0;for(;e=0;n-=1){const e=127&t.get(n);r=r.multipliedBy(128),r=r.plus(e)}return t.consume(e+1),new q(r).toString()},Ht=Et(F.VH),zt=It(F.VH),Kt={branch:i.BRANCH,contents:[i.OPERATION]},qt={pkh:i.TZ1,secret:i.SECRET},Ft={source:i.PKH,fee:i.ZARITH,counter:i.ZARITH,gas_limit:i.ZARITH,storage_limit:i.ZARITH,public_key:i.PUBLIC_KEY},Zt={source:i.PKH,fee:i.ZARITH,counter:i.ZARITH,gas_limit:i.ZARITH,storage_limit:i.ZARITH,delegate:i.DELEGATE},jt={source:i.PKH,fee:i.ZARITH,counter:i.ZARITH,gas_limit:i.ZARITH,storage_limit:i.ZARITH,amount:i.ZARITH,destination:i.ADDRESS,parameters:i.PARAMETERS},Gt={source:i.PKH,fee:i.ZARITH,counter:i.ZARITH,gas_limit:i.ZARITH,storage_limit:i.ZARITH,balance:i.ZARITH,delegate:i.DELEGATE,script:i.SCRIPT},$t={source:i.PKH,period:i.INT32,proposal:i.PROPOSAL,ballot:i.BALLOT_STATEMENT},Vt={slot:i.INT16,level:i.INT32,round:i.INT32,block_payload_hash:i.BLOCK_PAYLOAD_HASH},Yt={slot:i.INT16,level:i.INT32,round:i.INT32,block_payload_hash:i.BLOCK_PAYLOAD_HASH},Xt={level:i.INT32,nonce:i.RAW},Wt={source:i.PKH,period:i.INT32,proposals:i.PROPOSAL_ARR},Jt={source:i.PKH,fee:i.ZARITH,counter:i.ZARITH,gas_limit:i.ZARITH,storage_limit:i.ZARITH,value:i.VALUE},Qt={source:i.PKH,fee:i.ZARITH,counter:i.ZARITH,gas_limit:i.ZARITH,storage_limit:i.ZARITH,ticket_contents:i.VALUE,ticket_ty:i.VALUE,ticket_ticketer:i.ADDRESS,ticket_amount:i.ZARITH,destination:i.ADDRESS,entrypoint:i.ENTRYPOINT},te={source:i.PKH,fee:i.ZARITH,counter:i.ZARITH,gas_limit:i.ZARITH,storage_limit:i.ZARITH,amount:i.ZARITH,destination:i.SMART_CONTRACT_ADDRESS},ee={source:i.PKH,fee:i.ZARITH,counter:i.ZARITH,gas_limit:i.ZARITH,storage_limit:i.ZARITH,pk:i.PUBLIC_KEY},re={consensus_key:i.PKH,delegate:i.PKH,destination:i.PKH},ne={source:i.PKH,fee:i.ZARITH,counter:i.ZARITH,gas_limit:i.ZARITH,storage_limit:i.ZARITH,limit:i.DEPOSITS_LIMIT},ie={source:i.PKH,fee:i.ZARITH,counter:i.ZARITH,gas_limit:i.ZARITH,storage_limit:i.ZARITH,pvm_kind:i.PVM_KIND,kernel:i.PADDED_BYTES,parameters_ty:i.VALUE,whitelist:i.PKH_ARR},fe={source:i.PKH,fee:i.ZARITH,counter:i.ZARITH,gas_limit:i.ZARITH,storage_limit:i.ZARITH,message:i.SMART_ROLLUP_MESSAGE},oe={source:i.PKH,fee:i.ZARITH,counter:i.ZARITH,gas_limit:i.ZARITH,storage_limit:i.ZARITH,rollup:i.SMART_ROLLUP_ADDRESS,cemented_commitment:i.SMART_ROLLUP_COMMITMENT_HASH,output_proof:i.PADDED_BYTES},se={arbitrary:i.PADDED_BYTES},ae=t=>e=>r=>Object.keys(e).reduce(((n,i)=>{const f=e[i];if(r&&Array.isArray(f)){const e=t[f[0]],o=r[i];if(!Array.isArray(o))throw new et(`Invalid operation value "${JSON.stringify(o)}" of key "${i}, expected value to be Array.`);return n+o.reduce(((t,r)=>t+e(r)),"")}return n+(0,t[f])(r[i])}),""),de=t=>e=>r=>Object.keys(e).reduce(((n,i)=>{const f=e[i];if(Array.isArray(f)){const e=t[f[0]],o=[],s=r.length();for(;r.length()>0;)if(o.push(e(r)),s===r.length())throw new tt("Unable to decode value");return Object.assign(Object.assign({},n),{[i]:o})}{const e=(0,t[f])(r);return void 0!==e?Object.assign(Object.assign({},n),{[i]:e}):Object.assign({},n)}}),{}),he={[i.SECRET]:e=>t(e.consume(20)),[i.RAW]:e=>t(e.consume(32)),[i.TZ1]:Tt,[i.BRANCH]:Rt,[i.ZARITH]:Ct,[i.PUBLIC_KEY]:t=>{switch(t.consume(1)[0]){case 0:return It(F.EDPK)(t);case 1:return It(F.SPPK)(t);case 2:return It(F.P2PK)(t);default:throw new v(t.toString(),V(G.NO_PREFIX_MATCHED))}},[i.PKH]:Pt,[i.PKH_ARR]:t=>{if(!Bt(t))return;const e=[];for(t.consume(4);t.length()>0;)e.push(Pt(t));return e},[i.DELEGATE]:t=>{if(Bt(t))return Pt(t)},[i.INT32]:t=>{const e=t.consume(4);let r=0;for(let t=0;t{const e=ct(t),r=ct(t);return{code:ht(new st(e)),storage:ht(new st(r))}},[i.BALLOT_STATEMENT]:t=>{const e=t.consume(1);switch(e[0]){case 0:return"yay";case 1:return"nay";case 2:return"pass";default:throw new J(e[0].toString())}},[i.PROPOSAL]:Nt,[i.PROPOSAL_ARR]:t=>{const e=[];for(t.consume(4);t.length()>0;)e.push(Nt(t));return e},[i.PARAMETERS]:t=>{if(0!==t.consume(1)[0]){const r=(t=>{const r=e(t.consume(1)[0],2);if(r in d)return d[r];{const e=ct(t,1),r=Mt.from(e).toString("utf8");if(r.length>31)throw new X(r);return r}})(t),n=ct(t);return{entrypoint:r,value:ht(new st(n))}}},[i.ADDRESS]:t=>{switch(t.consume(1)[0]){case 0:return Pt(t);case 1:{const e=It(F.KT1)(t);return t.consume(1),e}default:throw new g(t.toString(),": Unable to decode.")}},[i.SMART_ROLLUP_ADDRESS]:t=>{const e=It(F.SR1)(t);if(e.substring(0,3)!==F.SR1)throw new ft(e,V(G.NO_PREFIX_MATCHED)+` expecting prefix '${F.SR1}'.`);return e},[i.SMART_CONTRACT_ADDRESS]:t=>{if(1===t.consume(1)[0]){const e=It(F.KT1)(t);return t.consume(1),e}throw new w(t.toString(),V(G.NO_PREFIX_MATCHED))},[i.SMART_ROLLUP_COMMITMENT_HASH]:t=>{const e=It(F.SRC1)(t);if(e.substring(0,4)!==F.SRC1)throw new ot(e,V(G.NO_PREFIX_MATCHED)+` expecting prefix '${F.SRC1}'`);return e},[i.VALUE]:t=>{const e=ct(t);return ht(new st(e))},[i.INT16]:t=>{const e=t.consume(2);let r=0;for(let t=0;t{const e=ct(t);return Mt.from(e).toString("utf8")},[i.BURN_LIMIT]:t=>{const e=t.consume(1);if("00"!==Mt.from(e).toString("hex"))return Ct(t)},[i.DEPOSITS_LIMIT]:t=>{const e=t.consume(1);if("00"!==Mt.from(e).toString("hex"))return Ct(t)},[i.PVM_KIND]:t=>{const e=t.consume(1);switch(e[0]){case 0:return"arith";case 1:return"wasm_2_0_0";case 2:return"riscv";default:throw new it(e[0].toString())}},[i.PADDED_BYTES]:t=>{const e=ct(t);return Mt.from(e).toString("hex")},[i.SMART_ROLLUP_MESSAGE]:t=>{const e=ct(t);return((t,e=4)=>{const r=[];let n=t;for(;n.length();){const t=n.consume(e),i=parseInt(at.from(t).toString("hex"),16);r.push(n.consume(i)),n=n.slice(i+e)}return r})(new st(e)).map((t=>Mt.from(t).toString("hex")))}};he[i.OPERATION]=(t=>e=>{const r=e.consume(1),n=s[r[0]];if(void 0===n)throw new rt(r[0].toString());const i=t[n](e);if("object"!=typeof i)throw new tt("Invalid operation, cannot be decoded.");return Object.assign({kind:n},i)})(he),he[i.OP_ACTIVATE_ACCOUNT]=t=>de(he)(qt)(t),he[i.OP_FAILING_NOOP]=t=>de(he)(se)(t),he[i.OP_DELEGATION]=t=>de(he)(Zt)(t),he[i.OP_TRANSACTION]=t=>de(he)(jt)(t),he[i.OP_ORIGINATION]=t=>de(he)(Gt)(t),he[i.OP_BALLOT]=t=>de(he)($t)(t),he[i.OP_ATTESTATION]=t=>de(he)(Vt)(t),he[i.OP_ENDORSEMENT]=t=>de(he)(Yt)(t),he[i.OP_SEED_NONCE_REVELATION]=t=>de(he)(Xt)(t),he[i.OP_PROPOSALS]=t=>de(he)(Wt)(t),he[i.OP_REVEAL]=t=>de(he)(Ft)(t),he[i.OP_REGISTER_GLOBAL_CONSTANT]=t=>de(he)(Jt)(t),he[i.OP_TRANSFER_TICKET]=t=>de(he)(Qt)(t),he[i.OP_INCREASE_PAID_STORAGE]=t=>de(he)(te)(t),he[i.OP_UPDATE_CONSENSUS_KEY]=t=>de(he)(ee)(t),he[i.OP_DRAIN_DELEGATE]=t=>de(he)(re)(t),he[i.OP_SMART_ROLLUP_ORIGINATE]=t=>de(he)(ie)(t),he[i.OP_SMART_ROLLUP_ADD_MESSAGES]=t=>de(he)(fe)(t),he[i.OP_SMART_ROLLUP_EXECUTE_OUTBOX_MESSAGE]=t=>de(he)(oe)(t),he[i.MANAGER]=de(he)(Kt),he[i.OP_SET_DEPOSITS_LIMIT]=t=>de(he)(ne)(t);const ce={[i.SECRET]:t=>t,[i.RAW]:t=>t,[i.TZ1]:Ot,[i.BRANCH]:Lt,[i.ZARITH]:Dt,[i.PUBLIC_KEY]:t=>{switch(t.substring(0,4)){case F.EDPK:return"00"+Et(F.EDPK)(t);case F.SPPK:return"01"+Et(F.SPPK)(t);case F.P2PK:return"02"+Et(F.P2PK)(t);default:throw new v(t,V(G.NO_PREFIX_MATCHED)+` expecting one of the following '${F.EDPK}', '${F.SPPK}', '${F.P2PK}' or '${F.BLPK}'.`)}},[i.PKH]:kt,[i.PKH_ARR]:t=>{if(!t)return xt(!1);if(0===t.length)return xt(!0)+e(0);const r=t.reduce(((t,e)=>t+kt(e)),"");return xt(!0)+e(r.length/2)+r},[i.DELEGATE]:t=>t?xt(!0)+kt(t):xt(!1),[i.SCRIPT]:t=>{const r=dt(t.code),n=dt(t.storage);return`${e(r.length/2,8)}${r}${e(n.length/2,8)}${n}`},[i.BALLOT_STATEMENT]:t=>{switch(t){case"yay":return"00";case"nay":return"01";case"pass":return"02";default:throw new W(t)}},[i.PROPOSAL]:Ut,[i.PROPOSAL_ARR]:t=>e(32*t.length)+t.map((t=>Ut(t))).join(""),[i.INT32]:t=>{const e=parseInt(String(t),10),r=[];for(let t=0;t<4;t++){const n=8*(4-(t+1));r.push((e&255<>n)}return Mt.from(r).toString("hex")},[i.PARAMETERS]:t=>{if(!t||"default"===t.entrypoint&&"prim"in t.value&&"Unit"===t.value.prim)return"00";const e=(t=>{if(t in h)return`${h[t]}`;if(t.length>31)throw new X(t);return`ff${dt({string:t}).slice(8)}`})(t.entrypoint),r=dt(t.value);return`ff${e}${(r.length/2).toString(16).padStart(8,"0")}${r}`},[i.ADDRESS]:t=>{switch(t.substring(0,3)){case F.TZ1:case F.TZ2:case F.TZ3:case F.TZ4:return"00"+kt(t);case F.KT1:return"01"+Et(F.KT1)(t)+"00";default:throw new g(t,V(G.NO_PREFIX_MATCHED)+` expecting one of the following prefix '${F.TZ1}', ${F.TZ2}', '${F.TZ3}', '${F.TZ4}' or '${F.KT1}'.`)}},[i.SMART_ROLLUP_ADDRESS]:t=>{if(t.substring(0,3)!==F.SR1)throw new ft(t,V(G.NO_PREFIX_MATCHED)+` expecting prefix '${F.SR1}'.`);return Et(F.SR1)(t)},[i.SMART_CONTRACT_ADDRESS]:t=>{if(t.substring(0,3)===F.KT1)return"01"+Et(F.KT1)(t)+"00";throw new w(t,V(G.NO_PREFIX_MATCHED)+` expecting prefix '${F.KT1}'.`)},[i.SMART_ROLLUP_COMMITMENT_HASH]:t=>{if(t.substring(0,4)===F.SRC1)return Et(F.SRC1)(t);throw new ot(t,V(G.NO_PREFIX_MATCHED)+` expecting prefix '${F.SRC1}'`)},[i.VALUE]:t=>{const r=dt(t);return`${e(r.length/2)}${r}`},[i.INT16]:t=>{const e=parseInt(String(t),10),r=[];for(let t=0;t<2;t++){const n=8*(2-(t+1));r.push((e&255<>n)}return Mt.from(r).toString("hex")},[i.BLOCK_PAYLOAD_HASH]:Ht,[i.ENTRYPOINT]:t=>`${dt({string:t}).slice(2)}`,[i.BURN_LIMIT]:t=>t?`ff${Dt(t)}`:"00",[i.DEPOSITS_LIMIT]:t=>t?`ff${Dt(t)}`:"00",[i.PVM_KIND]:t=>{switch(t){case"arith":return"00";case"wasm_2_0_0":return"01";case"riscv":return"02";default:throw new nt(t)}},[i.PADDED_BYTES]:(t,r=8)=>`${e(t.length/2,r)}${t}`,[i.SMART_ROLLUP_MESSAGE]:t=>{const r=t.reduce(((t,r)=>t+`${e(r.length/2)}${r}`),"");return`${e(r.length/2)}${r}`}};ce[i.OPERATION]=(t=>e=>{if(!(e.kind in t)||!(e.kind in a))throw new A(e.kind);return a[e.kind]+t[e.kind](e)})(ce),ce[i.OP_ACTIVATE_ACCOUNT]=t=>ae(ce)(qt)(t),ce[i.OP_DELEGATION]=t=>ae(ce)(Zt)(t),ce[i.OP_TRANSACTION]=t=>ae(ce)(jt)(t),ce[i.OP_ORIGINATION]=t=>ae(ce)(Gt)(t),ce[i.OP_BALLOT]=t=>ae(ce)($t)(t),ce[i.OP_ATTESTATION]=t=>ae(ce)(Vt)(t),ce[i.OP_ENDORSEMENT]=t=>ae(ce)(Yt)(t),ce[i.OP_SEED_NONCE_REVELATION]=t=>ae(ce)(Xt)(t),ce[i.OP_PROPOSALS]=t=>ae(ce)(Wt)(t),ce[i.OP_REVEAL]=t=>ae(ce)(Ft)(t),ce[i.OP_REGISTER_GLOBAL_CONSTANT]=t=>ae(ce)(Jt)(t),ce[i.OP_TRANSFER_TICKET]=t=>ae(ce)(Qt)(t),ce[i.OP_INCREASE_PAID_STORAGE]=t=>ae(ce)(te)(t),ce[i.OP_UPDATE_CONSENSUS_KEY]=t=>ae(ce)(ee)(t),ce[i.OP_DRAIN_DELEGATE]=t=>ae(ce)(re)(t),ce[i.OP_SMART_ROLLUP_ORIGINATE]=t=>ae(ce)(ie)(t),ce[i.OP_SMART_ROLLUP_ADD_MESSAGES]=t=>ae(ce)(fe)(t),ce[i.OP_SMART_ROLLUP_EXECUTE_OUTBOX_MESSAGE]=t=>ae(ce)(oe)(t),ce[i.MANAGER]=ae(ce)(Kt),ce[i.OP_SET_DEPOSITS_LIMIT]=t=>ae(ce)(ne)(t),ce[i.OP_FAILING_NOOP]=t=>ae(ce)(se)(t);const ue={activate_account:qt,reveal:Ft,delegation:Zt,transaction:jt,origination:Gt,ballot:$t,attestation:Vt,endorsement:Yt,seed_nonce_revelation:Xt,proposals:Wt,register_global_constant:Jt,transfer_ticket:Qt,increase_paid_storage:te,update_consensus_key:ee,drain_delegate:re,set_deposits_limit:ne,smart_rollup_originate:ie,smart_rollup_add_messages:fe,smart_rollup_execute_outbox_message:oe,failing_noop:se},le=t=>{const e=t.kind,r=Object.keys(t),n=("kind",r.filter((t=>"kind"!==t)));const i=Object.keys(ue[e]);return f=n,i.filter((t=>!f.includes(t)));var f};var be;!function(t){t.Pt24m4xi="Pt24m4xiPbLDhVgVfABUjirbmda3yohdN82Sp9FeuAXJ4eV9otd",t.PsBABY5H="PsBABY5HQTSkA4297zNHfsZNKtxULfL18y95qb3m53QJiXGmrbU",t.PsBabyM1="PsBabyM1eUXZseaJdmXFApDSBqj8YBfwELoxZHHW77EMcAbbwAS",t.PsCARTHA="PsCARTHAGazKbHtnKfLzQg3kms52kSRpgnDY982a9oYsSXRLQEb",t.PsDELPH1="PsDELPH1Kxsxt8f9eWbxQeRxkjfbxoqM52jvs5Y5fBxWWh4ifpo",t.PtEdo2Zk="PtEdo2ZkT9oKpimTah6x2embF25oss54njMuPzkJTEi5RqfdZFA",t.PsFLorena="PsFLorenaUUuikDWvMDr6fGBRG8kt3e3D3fHoXK1j1BFRxeSH4i",t.PtGRANADs="PtGRANADsDU8R9daYKAgWnQYAJ64omN1o3KMGVCykShA97vQbvV",t.PtHangz2="PtHangz2aRngywmSRGGvrcTyMbbdpWdpFKuS4uMWxg2RaH9i1qx",t.Psithaca2="Psithaca2MLRFYargivpo7YvUr7wUDqyxrdhC5CQq78mRvimz6A",t.PtJakart2="PtJakart2xVj7pYXJBXrqHgd82rdkLey5ZeeGwDgPp9rhQUbSqY",t.PtKathman="PtKathmankSpLLDALzWw7CGD2j2MtyveTwboEYokqUCP4a1LxMg",t.PtLimaPtL="PtLimaPtLMwfNinJi9rCfDPWea8dFgTZ1MeJ9f1m2SRic6ayiwW",t.PtMumbaii="PtMumbaiiFFEGbew1rRjzSPyzRbA51Tm3RVZL5suHPxSZYDhCEc",t.PtMumbai2="PtMumbai2TmsJHNGRkD8v8YDbtao7BLUC3wjASn1inAKLFCjaH1",t.PtNairobi="PtNairobiyssHuh87hEhfVBGCVrK3WnS8Z2FT4ymB5tAa4r1nQf",t.ProxfordY="ProxfordYmVfjWnRcgjWH36fW6PArwqykTFzotUxRs6gmTcZDuH",t.ProtoALpha="ProtoALphaALphaALphaALphaALphaALphaALphaALphaDdp3zK"}(be||(be={}));const pe={commitHash:"13a12ab7cf442043526745db2bbf4ef3b089c34a",version:"19.0.2"},ge=be.ProxfordY;function me(t,e){return{encoder:ce[t],decoder:e=>{const r=st.fromHexString(e);return he[t](r)}}}class ye{constructor(t=ge){this.protocolHash=t,this.codec=me(i.MANAGER,this.protocolHash)}forge(t){const e=function(t,e){const r=new RegExp(`^(${e.join("|")})`).exec(t);if(!r||0===r.length)return G.NO_PREFIX_MATCHED;const n=r[0];if(!function(t){return"string"==typeof t&&t in Z}(n))return G.NO_PREFIX_MATCHED;if(t.includes("%")&&(t=t.split("%")[0]),!/^(KT1\w{33})$/.test(t)&&"KT1"===n)return G.INVALID_CHECKSUM;let i=l().decodeUnsafe(t);return i?(i=i.slice(Z[n].length),i.length!==j[n]?G.INVALID_LENGTH:G.VALID):G.INVALID_CHECKSUM}(t.branch,$);var r;if(e!==G.VALID)throw new m(t.branch,V(e));for(const e of t.contents){if(r=e.kind,!Object.keys(ue).includes(r))throw new A(e.kind);const t=le(e);if(1===t.length){if("delegation"===e.kind&&"delegate"===t[0])continue;if("origination"===e.kind&&"delegate"===t[0])continue;if("transaction"===e.kind&&"parameters"===t[0])continue;if("set_deposits_limit"===e.kind&&"limit"===t[0])continue;if("smart_rollup_originate"===e.kind&&"whitelist"===t[0])continue;throw new Y(e,`missing properties "${t.join(", ")}"`)}if(t.length>1)throw new Y(e,`missing properties "${t.join(", ")}"`)}const n=this.codec.encoder(t).toLowerCase();return Promise.resolve(n)}parse(t){return Promise.resolve(this.codec.decoder(t))}}const ve=new ye})(),taquito_local_forging=n})(); //# sourceMappingURL=taquito_local_forging.js.map \ No newline at end of file diff --git a/Tests/KukaiCoreSwiftTests/Clients/BetterCallDevClientTests.swift b/Tests/KukaiCoreSwiftTests/Clients/BetterCallDevClientTests.swift index c254485b..0faa660c 100644 --- a/Tests/KukaiCoreSwiftTests/Clients/BetterCallDevClientTests.swift +++ b/Tests/KukaiCoreSwiftTests/Clients/BetterCallDevClientTests.swift @@ -22,6 +22,6 @@ class BetterCallDevClientTests: XCTestCase { expectation.fulfill() } - wait(for: [expectation], timeout: 10) + wait(for: [expectation], timeout: 120) } } diff --git a/Tests/KukaiCoreSwiftTests/Clients/DipDupClientTests.swift b/Tests/KukaiCoreSwiftTests/Clients/DipDupClientTests.swift index 1a7c3d2b..c04caeb2 100644 --- a/Tests/KukaiCoreSwiftTests/Clients/DipDupClientTests.swift +++ b/Tests/KukaiCoreSwiftTests/Clients/DipDupClientTests.swift @@ -20,18 +20,18 @@ class DipDupClientTests: XCTestCase { return } - XCTAssert(res.count == 359, "\(res.count)") + XCTAssert(res.count == 399, "\(res.count)") XCTAssert(res.first?.symbol == "tzBTC", res.first?.symbol ?? "-") - XCTAssert(res.first?.exchanges.first?.address == "KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5", res.first?.exchanges.first?.address ?? "-") + XCTAssert(res.first?.exchanges.first?.address == "KT1WBLrLE2vG8SedBqiSJFm4VVAZZBytJYHc", res.first?.exchanges.first?.address ?? "-") XCTAssert(res.first?.exchanges.first?.token.address == "KT1PWx2mnDueood7fEmfbBDKx1D9BAnnXitn", res.first?.exchanges.first?.token.address ?? "-") - XCTAssert(res.first?.exchanges.first?.xtzPoolAmount().normalisedRepresentation == "2812610.757224", res.first?.exchanges.first?.xtzPoolAmount().normalisedRepresentation ?? "-") - XCTAssert(res.first?.exchanges.first?.tokenPoolAmount().normalisedRepresentation == "257.44013552", res.first?.exchanges.first?.tokenPoolAmount().normalisedRepresentation ?? "-") - XCTAssert(res.first?.exchanges.first?.totalLiquidity().normalisedRepresentation == "225981758", res.first?.exchanges.first?.totalLiquidity().normalisedRepresentation ?? "-") + XCTAssert(res.first?.exchanges.first?.xtzPoolAmount().normalisedRepresentation == "9469.130217", res.first?.exchanges.first?.xtzPoolAmount().normalisedRepresentation ?? "-") + XCTAssert(res.first?.exchanges.first?.tokenPoolAmount().normalisedRepresentation == "0.22247765", res.first?.exchanges.first?.tokenPoolAmount().normalisedRepresentation ?? "-") + XCTAssert(res.first?.exchanges.first?.totalLiquidity().normalisedRepresentation == "3573.048455", res.first?.exchanges.first?.totalLiquidity().normalisedRepresentation ?? "-") - XCTAssert(res.last?.symbol == "FREE", res.last?.symbol ?? "-") - XCTAssert(res.last?.exchanges.first?.address == "KT1HFeGiKmUNSuB1kYuNibM7oGDc1cGqvrRw", res.last?.exchanges.first?.address ?? "-") - XCTAssert(res.last?.exchanges.first?.token.address == "KT1G12BEC48HDhp1LvmKJReny7HpGRUkmE6A", res.last?.exchanges.first?.token.address ?? "-") + XCTAssert(res.last?.symbol == "LINK.e", res.last?.symbol ?? "-") + XCTAssert(res.last?.exchanges.first?.address == "KT193vJRsjM9qJA7PVD7LzJhyKTWPvdq5RGd", res.last?.exchanges.first?.address ?? "-") + XCTAssert(res.last?.exchanges.first?.token.address == "KT1UsSfaXyqcjSVPeiD7U1bWgKy3taYN7NWY", res.last?.exchanges.first?.token.address ?? "-") XCTAssert(res.last?.exchanges.first?.xtzPoolAmount().normalisedRepresentation == "0", res.last?.exchanges.first?.xtzPoolAmount().normalisedRepresentation ?? "-") XCTAssert(res.last?.exchanges.first?.tokenPoolAmount().normalisedRepresentation == "0", res.last?.exchanges.first?.tokenPoolAmount().normalisedRepresentation ?? "-") XCTAssert(res.last?.exchanges.first?.totalLiquidity().normalisedRepresentation == "0", res.last?.exchanges.first?.totalLiquidity().normalisedRepresentation ?? "-") @@ -39,7 +39,7 @@ class DipDupClientTests: XCTestCase { expectation.fulfill() } - wait(for: [expectation], timeout: 10) + wait(for: [expectation], timeout: 120) } func testGetLiquidity() { @@ -65,7 +65,7 @@ class DipDupClientTests: XCTestCase { expectation.fulfill() } - wait(for: [expectation], timeout: 10) + wait(for: [expectation], timeout: 120) } /* @@ -96,7 +96,7 @@ class DipDupClientTests: XCTestCase { expectation.fulfill() } - wait(for: [expectation], timeout: 10) + wait(for: [expectation], timeout: 120) } */ } diff --git a/Tests/KukaiCoreSwiftTests/Clients/ObjktClientTests.swift b/Tests/KukaiCoreSwiftTests/Clients/ObjktClientTests.swift index 4aeb0f06..bc230e69 100644 --- a/Tests/KukaiCoreSwiftTests/Clients/ObjktClientTests.swift +++ b/Tests/KukaiCoreSwiftTests/Clients/ObjktClientTests.swift @@ -44,7 +44,7 @@ class ObjktClientTests: XCTestCase { expectation.fulfill() } - wait(for: [expectation], timeout: 10) + wait(for: [expectation], timeout: 120) let unresolved = MockConstants.shared.objktClient.unresolvedCollections(addresses: ["KT1PETpupvqJVSTEayqCDchHWFXDPD4TyBNK", "not-in-list"]) XCTAssert(unresolved.count == 1, unresolved.count.description) @@ -83,7 +83,7 @@ class ObjktClientTests: XCTestCase { expectation.fulfill() } - wait(for: [expectation], timeout: 10) + wait(for: [expectation], timeout: 120) let token = MockConstants.shared.objktClient.tokenResponse(forAddress: "KT1XNJ67F3JN2cmq6s1LmqtVg7gy9tCcN4E2", tokenId: 15) XCTAssert(token != nil) diff --git a/Tests/KukaiCoreSwiftTests/Clients/TezosDomainsTests.swift b/Tests/KukaiCoreSwiftTests/Clients/TezosDomainsTests.swift index 60d4d787..3c329682 100644 --- a/Tests/KukaiCoreSwiftTests/Clients/TezosDomainsTests.swift +++ b/Tests/KukaiCoreSwiftTests/Clients/TezosDomainsTests.swift @@ -32,7 +32,7 @@ class TezosDomainsClientTests: XCTestCase { } }) - wait(for: [expectation], timeout: 10) + wait(for: [expectation], timeout: 120) } func testGetAddress() { @@ -49,7 +49,7 @@ class TezosDomainsClientTests: XCTestCase { } }) - wait(for: [expectation], timeout: 10) + wait(for: [expectation], timeout: 120) } func testGetDomains() { @@ -66,7 +66,7 @@ class TezosDomainsClientTests: XCTestCase { } }) - wait(for: [expectation], timeout: 10) + wait(for: [expectation], timeout: 120) } func testGetAddresses() { @@ -83,7 +83,7 @@ class TezosDomainsClientTests: XCTestCase { } }) - wait(for: [expectation], timeout: 10) + wait(for: [expectation], timeout: 120) } func testGetBoth() { @@ -101,7 +101,7 @@ class TezosDomainsClientTests: XCTestCase { } } - wait(for: [expectation], timeout: 10) + wait(for: [expectation], timeout: 120) } func testGetBothBulk() { @@ -119,6 +119,6 @@ class TezosDomainsClientTests: XCTestCase { } } - wait(for: [expectation], timeout: 10) + wait(for: [expectation], timeout: 120) } } diff --git a/Tests/KukaiCoreSwiftTests/Clients/TezosNodeClientTests.swift b/Tests/KukaiCoreSwiftTests/Clients/TezosNodeClientTests.swift index c6e77826..29ee94c0 100644 --- a/Tests/KukaiCoreSwiftTests/Clients/TezosNodeClientTests.swift +++ b/Tests/KukaiCoreSwiftTests/Clients/TezosNodeClientTests.swift @@ -32,7 +32,7 @@ class TezosNodeClientTests: XCTestCase { expectation.fulfill() } - wait(for: [expectation], timeout: 10) + wait(for: [expectation], timeout: 120) } func testDelegate() { @@ -49,7 +49,7 @@ class TezosNodeClientTests: XCTestCase { expectation.fulfill() } - wait(for: [expectation], timeout: 10) + wait(for: [expectation], timeout: 120) } func testEstiamte() { @@ -87,11 +87,12 @@ class TezosNodeClientTests: XCTestCase { expectation.fulfill() } - wait(for: [expectation], timeout: 10) + wait(for: [expectation], timeout: 120) } func testSendOperationsError() { - MockURLProtocol.triggerCounterInFutureError() + MockURLProtocol.triggerCounterInFutureError(nodeUrl: 0) + MockURLProtocol.triggerCounterInFutureError(nodeUrl: 1) let expectation = XCTestExpectation(description: "tezos node client") MockConstants.shared.tezosNodeClient.send(operations: MockConstants.sendOperations, withWallet: MockConstants.defaultHdWallet) { result in @@ -107,7 +108,7 @@ class TezosNodeClientTests: XCTestCase { } - wait(for: [expectation], timeout: 10) + wait(for: [expectation], timeout: 120) } func testSendPayload() { @@ -124,7 +125,7 @@ class TezosNodeClientTests: XCTestCase { expectation.fulfill() } - wait(for: [expectation], timeout: 10) + wait(for: [expectation], timeout: 120) } func testGetMetadata() { @@ -146,7 +147,7 @@ class TezosNodeClientTests: XCTestCase { expectation.fulfill() } - wait(for: [expectation], timeout: 10) + wait(for: [expectation], timeout: 120) } func testGetContractStorage() { @@ -163,7 +164,7 @@ class TezosNodeClientTests: XCTestCase { expectation.fulfill() } - wait(for: [expectation], timeout: 10) + wait(for: [expectation], timeout: 120) } func testGetNetworkInformation() { @@ -177,6 +178,6 @@ class TezosNodeClientTests: XCTestCase { expectation.fulfill() }) - wait(for: [expectation], timeout: 10) + wait(for: [expectation], timeout: 120) } } diff --git a/Tests/KukaiCoreSwiftTests/Clients/TzKTClientTests.swift b/Tests/KukaiCoreSwiftTests/Clients/TzKTClientTests.swift index 9c2b6a21..ec8f2613 100644 --- a/Tests/KukaiCoreSwiftTests/Clients/TzKTClientTests.swift +++ b/Tests/KukaiCoreSwiftTests/Clients/TzKTClientTests.swift @@ -32,7 +32,7 @@ class TzKTClientTests: XCTestCase { expectation.fulfill() } - wait(for: [expectation], timeout: 10) + wait(for: [expectation], timeout: 120) } func testGetOperationError() { @@ -50,7 +50,7 @@ class TzKTClientTests: XCTestCase { expectation.fulfill() } - wait(for: [expectation], timeout: 10) + wait(for: [expectation], timeout: 120) } func testTransactionHistory() { @@ -59,12 +59,20 @@ class TzKTClientTests: XCTestCase { MockConstants.shared.tzktClient.fetchTransactions(forAddress: MockConstants.defaultHdWallet.address) { transactions in let groups = MockConstants.shared.tzktClient.groupTransactions(transactions: transactions, currentWalletAddress: MockConstants.defaultHdWallet.address) - XCTAssert(groups.count == 18, "\(groups.count)") + XCTAssert(groups.count == 19, "\(groups.count)") for (index, group) in groups.enumerated() { switch index { case 0: + XCTAssert(group.groupType == .receive, group.groupType.rawValue) + XCTAssert(group.transactions.count == 1, group.transactions.count.description) + XCTAssert(group.hash == "1030074601046021", group.hash) + XCTAssert(group.primaryToken?.tokenContractAddress == "KT1PegvRtG4LTWGjNx8bswVEvqKNC1FBZBjL", group.primaryToken?.tokenContractAddress ?? "-") + XCTAssert(group.primaryToken?.balance.normalisedRepresentation == "40", group.primaryToken?.balance.normalisedRepresentation ?? "-") + XCTAssert(group.primaryToken?.name == "TestFirstMCDao", group.primaryToken?.name ?? "-") + + case 1: XCTAssert(group.groupType == .receive, group.groupType.rawValue) XCTAssert(group.transactions.count == 1, group.transactions.count.description) XCTAssert(group.hash == "op3K5QH2Tho6sUJy54hyRDXaRa7p11AvoVfZDmT4gLojFFDGG6Y", group.hash) @@ -72,13 +80,13 @@ class TzKTClientTests: XCTestCase { XCTAssert(group.primaryToken?.balance.normalisedRepresentation == "1", group.primaryToken?.balance.normalisedRepresentation ?? "-") XCTAssert(group.primaryToken?.name == "Wood Mooncake", group.primaryToken?.name ?? "-") - case 1: + case 2: XCTAssert(group.groupType == .contractCall, group.groupType.rawValue) XCTAssert(group.transactions.count == 1, group.transactions.count.description) XCTAssert(group.hash == "op3K5QH2Tho6sUJy54hyRDXaRa7p11AvoVfZDmT4gLojFFDGG6Y", group.hash) XCTAssert(group.entrypointCalled == "claim", group.entrypointCalled ?? "-") - case 2: + case 3: XCTAssert(group.groupType == .receive, group.groupType.rawValue) XCTAssert(group.transactions.count == 1, group.transactions.count.description) XCTAssert(group.hash == "opRQnyqN4fogpRSBCuxFpCm9SGooy1QY3r5Xc4FXre33tNFWh97", group.hash) @@ -86,13 +94,13 @@ class TzKTClientTests: XCTestCase { XCTAssert(group.primaryToken?.balance.normalisedRepresentation == "1", group.primaryToken?.balance.normalisedRepresentation ?? "-") XCTAssert(group.primaryToken?.name == "Wood Mooncake", group.primaryToken?.name ?? "-") - case 3: + case 4: XCTAssert(group.groupType == .contractCall, group.groupType.rawValue) XCTAssert(group.transactions.count == 1, group.transactions.count.description) XCTAssert(group.hash == "opRQnyqN4fogpRSBCuxFpCm9SGooy1QY3r5Xc4FXre33tNFWh97", group.hash) XCTAssert(group.entrypointCalled == "claim", group.entrypointCalled ?? "-") - case 4: + case 5: XCTAssert(group.groupType == .receive, group.groupType.rawValue) XCTAssert(group.transactions.count == 1, group.transactions.count.description) XCTAssert(group.hash == "oopQFnCyS9fPYeBftynXH6coUUAy4UPBuA3Hcp8nsApYNKxVuRx", group.hash) @@ -100,7 +108,7 @@ class TzKTClientTests: XCTestCase { XCTAssert(group.primaryToken?.balance.normalisedRepresentation == "0.5", group.primaryToken?.balance.normalisedRepresentation ?? "-") XCTAssert(group.primaryToken?.name == "Tezos", group.primaryToken?.name ?? "-") - case 5: + case 6: XCTAssert(group.groupType == .receive, group.groupType.rawValue) XCTAssert(group.transactions.count == 1, group.transactions.count.description) XCTAssert(group.hash == "onjmwjKLUPVpguDVYSZp2yh1tqGPp5oEgAjSbiFvxv74XsmMarg", group.hash) @@ -108,7 +116,7 @@ class TzKTClientTests: XCTestCase { XCTAssert(group.primaryToken?.balance.normalisedRepresentation == "228.9299288", group.primaryToken?.balance.normalisedRepresentation ?? "-") XCTAssert(group.primaryToken?.name == "Crunchy.Network CRNCHY", group.primaryToken?.name ?? "-") - case 6: + case 7: XCTAssert(group.groupType == .receive, group.groupType.rawValue) XCTAssert(group.transactions.count == 1, group.transactions.count.description) XCTAssert(group.hash == "onjmwjKLUPVpguDVYSZp2yh1tqGPp5oEgAjSbiFvxv74XsmMarg", group.hash) @@ -116,7 +124,7 @@ class TzKTClientTests: XCTestCase { XCTAssert(group.primaryToken?.balance.normalisedRepresentation == "0.102422", group.primaryToken?.balance.normalisedRepresentation ?? "-") XCTAssert(group.primaryToken?.name == "Tezos", group.primaryToken?.name ?? "-") - case 7: + case 8: XCTAssert(group.groupType == .receive, group.groupType.rawValue) XCTAssert(group.transactions.count == 1, group.transactions.count.description) XCTAssert(group.hash == "onjmwjKLUPVpguDVYSZp2yh1tqGPp5oEgAjSbiFvxv74XsmMarg", group.hash) @@ -124,7 +132,7 @@ class TzKTClientTests: XCTestCase { XCTAssert(group.primaryToken?.balance.normalisedRepresentation == "3.160106", group.primaryToken?.balance.normalisedRepresentation ?? "-") XCTAssert(group.primaryToken?.name == "fDAO", group.primaryToken?.name ?? "-") - case 8: + case 9: XCTAssert(group.groupType == .contractCall, group.groupType.rawValue) XCTAssert(group.transactions.count == 7, group.transactions.count.description) XCTAssert(group.hash == "onjmwjKLUPVpguDVYSZp2yh1tqGPp5oEgAjSbiFvxv74XsmMarg", group.hash) @@ -155,7 +163,7 @@ class TzKTClientTests: XCTestCase { XCTAssert(group.transactions[6].subType == .contractCall, group.transactions[6].subType?.rawValue ?? "-") XCTAssert(group.transactions[6].entrypointCalled == "tezToTokenPayment", group.transactions[6].entrypointCalled ?? "-") - case 9: + case 10: XCTAssert(group.groupType == .receive, group.groupType.rawValue) XCTAssert(group.transactions.count == 1, group.transactions.count.description) XCTAssert(group.hash == "onqrPbMuVZy6dDELwhXfdF8BbANXy5mLj47gjAf7CE5cAUvSVoQ", group.hash) @@ -163,13 +171,13 @@ class TzKTClientTests: XCTestCase { XCTAssert(group.primaryToken?.balance.normalisedRepresentation == "1", group.primaryToken?.balance.normalisedRepresentation ?? "-") XCTAssert(group.primaryToken?.name == "Unknown Token", group.primaryToken?.name ?? "-") - case 10: + case 11: XCTAssert(group.groupType == .contractCall, group.groupType.rawValue) XCTAssert(group.transactions.count == 1, group.transactions.count.description) XCTAssert(group.hash == "onqrPbMuVZy6dDELwhXfdF8BbANXy5mLj47gjAf7CE5cAUvSVoQ", group.hash) XCTAssert(group.entrypointCalled == "mint", group.entrypointCalled ?? "-") - case 11: + case 12: XCTAssert(group.groupType == .receive, group.groupType.rawValue) XCTAssert(group.transactions.count == 1, group.transactions.count.description) XCTAssert(group.hash == "589699422879746", group.hash) @@ -177,7 +185,7 @@ class TzKTClientTests: XCTestCase { XCTAssert(group.primaryToken?.balance.normalisedRepresentation == "1", group.primaryToken?.balance.normalisedRepresentation ?? "-") XCTAssert(group.primaryToken?.name == "7/23 McLaren F1 Collectible", group.primaryToken?.name ?? "-") - case 12: + case 13: XCTAssert(group.groupType == .receive, group.groupType.rawValue) XCTAssert(group.transactions.count == 1, group.transactions.count.description) XCTAssert(group.hash == "579854610202626", group.hash) @@ -185,7 +193,7 @@ class TzKTClientTests: XCTestCase { XCTAssert(group.primaryToken?.balance.normalisedRepresentation == "1", group.primaryToken?.balance.normalisedRepresentation ?? "-") XCTAssert(group.primaryToken?.name == "6/23 McLaren F1 Collectible", group.primaryToken?.name ?? "-") - case 13: + case 14: XCTAssert(group.groupType == .receive, group.groupType.rawValue) XCTAssert(group.transactions.count == 1, group.transactions.count.description) XCTAssert(group.hash == "566013445799938", group.hash) @@ -193,7 +201,7 @@ class TzKTClientTests: XCTestCase { XCTAssert(group.primaryToken?.balance.normalisedRepresentation == "0", group.primaryToken?.balance.normalisedRepresentation ?? "-") XCTAssert(group.primaryToken?.name == "Lugh Euro pegged stablecoin", group.primaryToken?.name ?? "-") - case 14: + case 15: XCTAssert(group.groupType == .receive, group.groupType.rawValue) XCTAssert(group.transactions.count == 1, group.transactions.count.description) XCTAssert(group.hash == "ooyKEQLPDHHD2K8ZJSt92braYAPcRjxxfEmXVcdAQ5X4AoRuREA", group.hash) @@ -201,20 +209,20 @@ class TzKTClientTests: XCTestCase { XCTAssert(group.primaryToken?.balance.normalisedRepresentation == "0.975223", group.primaryToken?.balance.normalisedRepresentation ?? "-") XCTAssert(group.primaryToken?.name == "WTZ", group.primaryToken?.name ?? "-") - case 15: + case 16: XCTAssert(group.groupType == .contractCall, group.groupType.rawValue) XCTAssert(group.transactions.count == 1, group.transactions.count.description) XCTAssert(group.hash == "ooyKEQLPDHHD2K8ZJSt92braYAPcRjxxfEmXVcdAQ5X4AoRuREA", group.hash) XCTAssert(group.entrypointCalled == "wrap", group.entrypointCalled ?? "-") - case 16: + case 17: XCTAssert(group.groupType == .delegate, group.groupType.rawValue) XCTAssert(group.transactions.count == 1, group.transactions.count.description) XCTAssert(group.hash == "onpirLfDfojh84pihNKmrNFZ14Uf8z2SHYBVikcaKfSRBFFFb25", group.hash) XCTAssert(group.transactions.first?.prevDelegate?.alias == " Baking Benjamins", group.transactions.first?.prevDelegate?.alias ?? "-") XCTAssert(group.transactions.first?.newDelegate?.alias == "ECAD Labs Baker", group.transactions.first?.newDelegate?.alias ?? "-") - case 17: + case 18: XCTAssert(group.groupType == .contractCall, group.groupType.rawValue) XCTAssert(group.transactions.count == 1, group.transactions.count.description) XCTAssert(group.hash == "opC815T6zqTUtzQktPBBeLAB1eRnvuR5ETZDoLPGgAb3698wwFK", group.hash) @@ -228,7 +236,7 @@ class TzKTClientTests: XCTestCase { expectation.fulfill() } - wait(for: [expectation], timeout: 10) + wait(for: [expectation], timeout: 120) } func testGetAllBalances() { @@ -308,9 +316,9 @@ class TzKTClientTests: XCTestCase { XCTAssert(account.nfts[10].nfts?[0].name == "Bear Pawtrait", account.nfts[10].nfts?[0].name ?? "") // Liquidity tokens - XCTAssert(account.liquidityTokens.count == 2, "\(account.liquidityTokens.count)") - XCTAssert(account.liquidityTokens[0].sharesQty == "91", account.liquidityTokens[0].sharesQty) - XCTAssert(account.liquidityTokens[0].exchange.token.symbol == "tzBTC", account.liquidityTokens[0].exchange.token.symbol) + XCTAssert(account.liquidityTokens.count == 0, "\(account.liquidityTokens.count)") + //XCTAssert(account.liquidityTokens[0].sharesQty == "91", account.liquidityTokens[0].sharesQty) + //XCTAssert(account.liquidityTokens[0].exchange.token.symbol == "tzBTC", account.liquidityTokens[0].exchange.token.symbol) case .failure(let error): XCTFail("Error: \(error)") @@ -319,7 +327,7 @@ class TzKTClientTests: XCTestCase { expectation.fulfill() } - wait(for: [expectation], timeout: 30) + wait(for: [expectation], timeout: 120) } func testAvatarURL() { @@ -359,7 +367,7 @@ class TzKTClientTests: XCTestCase { expectation.fulfill() } - wait(for: [expectation], timeout: 30) + wait(for: [expectation], timeout: 120) } func testEstimateRewardsNoPayoutAddress() { @@ -390,7 +398,7 @@ class TzKTClientTests: XCTestCase { expectation.fulfill() } - wait(for: [expectation], timeout: 30) + wait(for: [expectation], timeout: 120) } func testBakers() { @@ -411,6 +419,6 @@ class TzKTClientTests: XCTestCase { expectation.fulfill() } - wait(for: [expectation], timeout: 30) + wait(for: [expectation], timeout: 120) } } diff --git a/Tests/KukaiCoreSwiftTests/Factories/OperationFactoryTests.swift b/Tests/KukaiCoreSwiftTests/Factories/OperationFactoryTests.swift index d48ce5fc..cd9340c9 100644 --- a/Tests/KukaiCoreSwiftTests/Factories/OperationFactoryTests.swift +++ b/Tests/KukaiCoreSwiftTests/Factories/OperationFactoryTests.swift @@ -116,13 +116,13 @@ class OperationFactoryTests: XCTestCase { func testAllowance() { let address = MockConstants.defaultHdWallet.address - let op = OperationFactory.allowanceOperation(standard: .fa12, tokenAddress: MockConstants.token3Decimals.tokenContractAddress ?? "", spenderAddress: address, allowance: MockConstants.token3Decimals_1, walletAddress: address) + let op = OperationFactory.allowanceOperation(standard: .fa12, tokenAddress: MockConstants.token3Decimals.tokenContractAddress ?? "", tokenId: nil, spenderAddress: address, allowance: MockConstants.token3Decimals_1, walletAddress: address) XCTAssert(op.source == MockConstants.defaultHdWallet.address) XCTAssert(op.counter == "0") XCTAssert(op.operationKind == .transaction) XCTAssert(op is OperationTransaction) - let op2 = OperationFactory.allowanceOperation(standard: .fa2, tokenAddress: MockConstants.token3Decimals.tokenContractAddress ?? "", spenderAddress: address, allowance: MockConstants.token3Decimals_1, walletAddress: address) + let op2 = OperationFactory.allowanceOperation(standard: .fa2, tokenAddress: MockConstants.token3Decimals.tokenContractAddress ?? "", tokenId: "0", spenderAddress: address, allowance: MockConstants.token3Decimals_1, walletAddress: address) XCTAssert(op2.source == MockConstants.defaultHdWallet.address) XCTAssert(op2.counter == "0") XCTAssert(op2.operationKind == .transaction) @@ -169,7 +169,7 @@ class OperationFactoryTests: XCTestCase { func testXtzToToken() { let address = MockConstants.defaultHdWallet.address - let token = DipDupToken(symbol: "TEST", address: "KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5", tokenId: 0, decimals: 0, standard: .fa12) + let token = DipDupToken(symbol: "TEST", address: "KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5", tokenId: 0, decimals: 0, standard: .fa12, thumbnailUri: nil) let dex = DipDupExchange(name: .lb, address: "KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5", tezPool: "10000000000", tokenPool: "100000", sharesTotal: "1000", midPrice: "1", token: token) let op = OperationFactory.swapXtzToToken(withDex: dex, xtzAmount: XTZAmount(fromNormalisedAmount: 1.5), minTokenAmount: TokenAmount(fromNormalisedAmount: 1, decimalPlaces: 8), walletAddress: address, timeout: 30) @@ -197,6 +197,7 @@ class OperationFactoryTests: XCTestCase { } } + /* func testTokenToXTZ_LB() { let address = MockConstants.defaultHdWallet.address let token = DipDupToken(symbol: "TEST", address: "KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5", tokenId: 0, decimals: 0, standard: .fa12) @@ -274,7 +275,9 @@ class OperationFactoryTests: XCTestCase { XCTFail("invalid op type") } } + */ + /* func testTokenToXTZ_QUIPU() { let address = MockConstants.defaultHdWallet.address let token = DipDupToken(symbol: "TEST", address: "KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5", tokenId: 0, decimals: 0, standard: .fa2) @@ -348,7 +351,9 @@ class OperationFactoryTests: XCTestCase { XCTFail("invalid op type") } } + */ + /* func testAddLiquidity_LB() { let address = MockConstants.defaultHdWallet.address let token = DipDupToken(symbol: "TEST", address: "KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5", tokenId: 0, decimals: 0, standard: .fa12) @@ -426,7 +431,9 @@ class OperationFactoryTests: XCTestCase { XCTFail("invalid op type") } } + */ + /* func testAddLiquidity_QUIPU() { let address = MockConstants.defaultHdWallet.address let token = DipDupToken(symbol: "TEST", address: "KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5", tokenId: 0, decimals: 0, standard: .fa2) @@ -496,10 +503,11 @@ class OperationFactoryTests: XCTestCase { XCTFail("invalid op type") } } + */ func testRemoveLiquidity() { let address = MockConstants.defaultHdWallet.address - let token = DipDupToken(symbol: "TEST", address: "KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5", tokenId: 0, decimals: 0, standard: .fa12) + let token = DipDupToken(symbol: "TEST", address: "KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5", tokenId: 0, decimals: 0, standard: .fa12, thumbnailUri: nil) let dex = DipDupExchange(name: .lb, address: "KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5", tezPool: "10000000000", tokenPool: "100000", sharesTotal: "1000", midPrice: "1", token: token) let op = OperationFactory.removeLiquidity(withDex: dex, minXTZ: XTZAmount(fromNormalisedAmount: 1), minToken: TokenAmount(fromNormalisedAmount: 1.5, decimalPlaces: 8), liquidityToBurn: TokenAmount(fromNormalisedAmount: 1.5, decimalPlaces: 8), walletAddress: address, timeout: 30) @@ -532,71 +540,218 @@ class OperationFactoryTests: XCTestCase { } func testExtractors() { + let xtzOp = OperationFactory.sendOperation(MockConstants.xtz_1, of: MockConstants.tokenXTZ, from: MockConstants.defaultHdWallet.address, to: MockConstants.defaultLinearWallet.address) - let results1 = OperationFactory.Extractor.faTokenDetailsFrom(operations: xtzOp) - XCTAssert(results1 == nil) + let opFA1 = OperationFactory.sendOperation(MockConstants.token3Decimals_1, of: MockConstants.token3Decimals, from: MockConstants.defaultHdWallet.address, to: MockConstants.defaultLinearWallet.address) + let opFA2 = OperationFactory.sendOperation(MockConstants.token10Decimals_1, of: MockConstants.token10Decimals, from: MockConstants.defaultHdWallet.address, to: MockConstants.defaultLinearWallet.address) + let opNFT = OperationFactory.sendOperation(1, ofNft: (MockConstants.tokenWithNFTs.nfts ?? [])[0], from: MockConstants.defaultHdWallet.address, to: MockConstants.defaultLinearWallet.address) - let isTezTransfer1 = OperationFactory.Extractor.isTezTransfer(operations: xtzOp) - XCTAssert(isTezTransfer1) + let dexToken = DipDupToken(symbol: "BLAH", address: "KT1def", tokenId: 123, decimals: 3, standard: .fa2, thumbnailUri: nil) + let dex = DipDupExchange(name: .quipuswap, address: "KT1abc", tezPool: "100000000000", tokenPool: "1000000000", sharesTotal: "100000", midPrice: "14", token: dexToken) + let swap = OperationFactory.swapXtzToToken(withDex: dex, xtzAmount: .init(fromNormalisedAmount: 14), minTokenAmount: .init(fromNormalisedAmount: 2, decimalPlaces: 3), walletAddress: "tz1abc", timeout: 60) + let delegate = OperationFactory.delegateOperation(to: "KT1abc", from: MockConstants.defaultHdWallet.address) + // is single transctions + XCTAssert( OperationFactory.Extractor.isSingleTransaction(operations: xtzOp) != nil ) + XCTAssert( OperationFactory.Extractor.isSingleTransaction(operations: opFA1) != nil ) + XCTAssert( OperationFactory.Extractor.isSingleTransaction(operations: opFA2) != nil ) + XCTAssert( OperationFactory.Extractor.isSingleTransaction(operations: opNFT) != nil ) + XCTAssert( OperationFactory.Extractor.isSingleTransaction(operations: MockConstants.sendOperationWithReveal) != nil ) - let opFA1 = OperationFactory.sendOperation(MockConstants.token3Decimals_1, of: MockConstants.token3Decimals, from: MockConstants.defaultHdWallet.address, to: MockConstants.defaultLinearWallet.address) - let results2 = OperationFactory.Extractor.faTokenDetailsFrom(operations: opFA1) - XCTAssert(results2 != nil) - XCTAssert(results2?.tokenContract == "KT19at7rQUvyjxnZ2fBv7D9zc8rkyG7gAoU8", results2?.tokenContract ?? "-") - XCTAssert(results2?.rpcAmount == "1000", results2?.rpcAmount ?? "-") - XCTAssert(results2?.tokenId == nil, results2?.tokenId?.description ?? "-") - let isTezTransfer2 = OperationFactory.Extractor.isTezTransfer(operations: opFA1) - XCTAssert(!isTezTransfer2) + // Is Tez transfer + XCTAssert( OperationFactory.Extractor.isTezTransfer(operations: xtzOp) != nil ) + XCTAssert( OperationFactory.Extractor.isTezTransfer(operations: opFA1) == nil ) + XCTAssert( OperationFactory.Extractor.isTezTransfer(operations: opFA2) == nil ) + XCTAssert( OperationFactory.Extractor.isTezTransfer(operations: opNFT) == nil ) + XCTAssert( OperationFactory.Extractor.isTezTransfer(operations: MockConstants.sendOperationWithReveal) != nil ) - let firstTrasnfer1 = OperationFactory.Extractor.firstTransferEntrypointOperation(operations: opFA1) - XCTAssert(firstTrasnfer1?.destination == "KT19at7rQUvyjxnZ2fBv7D9zc8rkyG7gAoU8", firstTrasnfer1?.destination ?? "-") + // Is Delegate + XCTAssert( OperationFactory.Extractor.isDelegate(operations: delegate) != nil ) + XCTAssert( OperationFactory.Extractor.isDelegate(operations: opFA1) == nil ) - let opFA2 = OperationFactory.sendOperation(MockConstants.token10Decimals_1, of: MockConstants.token10Decimals, from: MockConstants.defaultHdWallet.address, to: MockConstants.defaultLinearWallet.address) - let results3 = OperationFactory.Extractor.faTokenDetailsFrom(operations: opFA2) - XCTAssert(results3 != nil) - XCTAssert(results3?.tokenContract == "KT1G1cCRNBgQ48mVDjopHjEmTN5Sbtar8nn9", results3?.tokenContract ?? "-") - XCTAssert(results3?.rpcAmount == "10000000000", results3?.rpcAmount ?? "-") - XCTAssert(results3?.tokenId == 0, results3?.tokenId?.description ?? "-") + // is token transfer + XCTAssert( OperationFactory.Extractor.isFaTokenTransfer(operations: xtzOp) == nil ) - let isTezTransfer3 = OperationFactory.Extractor.isTezTransfer(operations: opFA2) - XCTAssert(!isTezTransfer3) + let fa1Results = OperationFactory.Extractor.isFaTokenTransfer(operations: opFA1) + XCTAssert(fa1Results?.tokenContract == "KT19at7rQUvyjxnZ2fBv7D9zc8rkyG7gAoU8", fa1Results?.tokenContract ?? "-") + XCTAssert(fa1Results?.rpcAmount == "1000", fa1Results?.rpcAmount ?? "-") + XCTAssert(fa1Results?.tokenId == nil, fa1Results?.tokenId?.description ?? "-") - let firstTrasnfer2 = OperationFactory.Extractor.firstTransferEntrypointOperation(operations: opFA2) - XCTAssert(firstTrasnfer2?.destination == "KT1G1cCRNBgQ48mVDjopHjEmTN5Sbtar8nn9", firstTrasnfer2?.destination ?? "-") + let fa2Results = OperationFactory.Extractor.isFaTokenTransfer(operations: opFA2) + XCTAssert(fa2Results?.tokenContract == "KT1G1cCRNBgQ48mVDjopHjEmTN5Sbtar8nn9", fa2Results?.tokenContract ?? "-") + XCTAssert(fa2Results?.rpcAmount == "10000000000", fa2Results?.rpcAmount ?? "-") + XCTAssert(fa2Results?.tokenId == 0, fa2Results?.tokenId?.description ?? "-") + let nftResults = OperationFactory.Extractor.isFaTokenTransfer(operations: opNFT) + XCTAssert(nftResults?.tokenContract == "KT1G1cCRNBgQ48mVDjopHjEmTN5Sbtabc123", nftResults?.tokenContract ?? "-") + XCTAssert(nftResults?.rpcAmount == "1", nftResults?.rpcAmount ?? "-") + XCTAssert(nftResults?.tokenId == 4, nftResults?.tokenId?.description ?? "-") + XCTAssert( OperationFactory.Extractor.isFaTokenTransfer(operations: MockConstants.sendOperationWithReveal) == nil ) - let opNFT = OperationFactory.sendOperation(1, ofNft: (MockConstants.tokenWithNFTs.nfts ?? [])[0], from: MockConstants.defaultHdWallet.address, to: MockConstants.defaultLinearWallet.address) - let results4 = OperationFactory.Extractor.faTokenDetailsFrom(operations: opNFT) - XCTAssert(results4 != nil) - XCTAssert(results4?.tokenContract == "KT1G1cCRNBgQ48mVDjopHjEmTN5Sbtabc123", results4?.tokenContract ?? "-") - XCTAssert(results4?.rpcAmount == "1", results4?.rpcAmount ?? "-") - XCTAssert(results4?.tokenId == 4, results4?.tokenId?.description ?? "-") + // contains all operationTransaction + XCTAssert( OperationFactory.Extractor.containsAllOperationTransactions(operations: xtzOp) ) + XCTAssert( OperationFactory.Extractor.containsAllOperationTransactions(operations: opFA1) ) + XCTAssert( OperationFactory.Extractor.containsAllOperationTransactions(operations: opFA2) ) + XCTAssert( OperationFactory.Extractor.containsAllOperationTransactions(operations: opNFT) ) + XCTAssert( OperationFactory.Extractor.containsAllOperationTransactions(operations: MockConstants.sendOperationWithReveal, ignoreReveal: true) ) + XCTAssert( OperationFactory.Extractor.containsAllOperationTransactions(operations: MockConstants.sendOperationWithReveal, ignoreReveal: false) == false ) - let dexToken = DipDupToken(symbol: "BLAH", address: "KT1def", tokenId: 123, decimals: 3, standard: .fa2) - let dex = DipDupExchange(name: .quipuswap, address: "KT1abc", tezPool: "100000000000", tokenPool: "1000000000", sharesTotal: "100000", midPrice: "14", token: dexToken) - let swap = OperationFactory.swapXtzToToken(withDex: dex, xtzAmount: .init(fromNormalisedAmount: 14), minTokenAmount: .init(fromNormalisedAmount: 2, decimalPlaces: 3), walletAddress: "tz1abc", timeout: 60) + // is contract + XCTAssert( OperationFactory.Extractor.isContractCall(operation: xtzOp[0]) == nil ) + + let contractDetails1 = OperationFactory.Extractor.isContractCall(operation: swap[0]) + XCTAssert(contractDetails1?.address == "KT1abc", contractDetails1?.address ?? "-") + XCTAssert(contractDetails1?.entrypoint == "tezToTokenPayment", contractDetails1?.entrypoint ?? "-") + + + // is contract not transfer + XCTAssert( OperationFactory.Extractor.isNonTransferContractCall(operation: opFA1[0]) == nil ) + + let contractDetails2 = OperationFactory.Extractor.isNonTransferContractCall(operation: swap[0]) + XCTAssert(contractDetails2?.address == "KT1abc", contractDetails2?.address ?? "-") + XCTAssert(contractDetails2?.entrypoint == "tezToTokenPayment", contractDetails2?.entrypoint ?? "-") + + + // is single contract + XCTAssert( OperationFactory.Extractor.isNonTransferContractCall(operation: opFA1[0]) == nil ) + + let contractDetails3 = OperationFactory.Extractor.isSingleContractCall(operations: swap) + XCTAssert(contractDetails3?.address == "KT1abc", contractDetails3?.address ?? "-") + XCTAssert(contractDetails3?.entrypoint == "tezToTokenPayment", contractDetails3?.entrypoint ?? "-") + } + + func testExtractors3RouteV3() { + let decoder = JSONDecoder() - let isContract = OperationFactory.Extractor.isContractCall(operations: swap) - XCTAssert(isContract?.entrypoint == "tezToTokenPayment", isContract?.entrypoint ?? "-") - XCTAssert(isContract?.address == "KT1abc", isContract?.address ?? "-") + let fa1ForXTZData = MockConstants.jsonStub(fromFilename: "3route_v3_fa1-for-xtz") + let fa1ForXTZJson = (try? decoder.decode([OperationTransaction].self, from: fa1ForXTZData)) ?? [] + XCTAssert(fa1ForXTZJson.count > 0) - let firstContractOp = OperationFactory.Extractor.firstContractCallOperation(operations: swap) - XCTAssert(firstContractOp?.destination == "KT1abc", firstContractOp?.destination ?? "-") + let details1 = OperationFactory.Extractor.firstNonZeroTokenTransferAmount(operations: fa1ForXTZJson) + XCTAssert(details1?.tokenContract == "KT1JVjgXPMMSaa6FkzeJcgb8q9cUaLmwaJUX", details1?.tokenContract ?? "-") + XCTAssert(details1?.rpcAmount == "6605336839045864425", details1?.rpcAmount ?? "-") + XCTAssert(details1?.tokenId == nil, details1?.tokenId?.description ?? "-") + XCTAssert(details1?.destination == "KT1R7WEtNNim3YgkxPt8wPMczjH3eyhbJMtz", details1?.destination ?? "-") - var xtzOpsCopy = xtzOp - xtzOpsCopy.append(contentsOf: xtzOp) + let fa2ForXTZData = MockConstants.jsonStub(fromFilename: "3route_v3_fa2-for-xtz") + let fa2ForXTZJson = (try? decoder.decode([OperationTransaction].self, from: fa2ForXTZData)) ?? [] + XCTAssert(fa2ForXTZJson.count > 0) + + let details2 = OperationFactory.Extractor.firstNonZeroTokenTransferAmount(operations: fa2ForXTZJson) + XCTAssert(details2?.tokenContract == "KT1914CUZ7EegAFPbfgQMRkw8Uz5mYkEz2ui", details2?.tokenContract ?? "-") + XCTAssert(details2?.rpcAmount == "47557742041756", details2?.rpcAmount ?? "-") + XCTAssert(details2?.tokenId == 0, details2?.tokenId?.description ?? "-") + XCTAssert(details2?.destination == "KT1R7WEtNNim3YgkxPt8wPMczjH3eyhbJMtz", details2?.destination ?? "-") + } + + func testExtractors3RouteV4() { + let decoder = JSONDecoder() + + let singleRouteJsonData = MockConstants.jsonStub(fromFilename: "3route_v4_single-route") + let singleRouteJson = (try? decoder.decode([OperationTransaction].self, from: singleRouteJsonData)) ?? [] + XCTAssert(singleRouteJson.count > 0) + + let details1 = OperationFactory.Extractor.firstNonZeroTokenTransferAmount(operations: singleRouteJson) + XCTAssert(details1?.tokenContract == "KT1ErKVqEhG9jxXgUG2KGLW3bNM7zXHX8SDF", details1?.tokenContract ?? "-") + XCTAssert(details1?.rpcAmount == "100000000000", details1?.rpcAmount ?? "-") + XCTAssert(details1?.tokenId == 3, details1?.tokenId?.description ?? "-") + XCTAssert(details1?.destination == "KT1V5XKmeypanMS9pR65REpqmVejWBZURuuT", details1?.destination ?? "-") + + + let multipleRouteJsonData = MockConstants.jsonStub(fromFilename: "3route_v4_multiple-routes") + let multipleRouteJson = (try? decoder.decode([OperationTransaction].self, from: multipleRouteJsonData)) ?? [] + XCTAssert(multipleRouteJson.count > 0) + + let details2 = OperationFactory.Extractor.firstNonZeroTokenTransferAmount(operations: multipleRouteJson) + XCTAssert(details2?.tokenContract == "KT1914CUZ7EegAFPbfgQMRkw8Uz5mYkEz2ui", details2?.tokenContract ?? "-") + XCTAssert(details2?.rpcAmount == "65639920011", details2?.rpcAmount ?? "-") + XCTAssert(details2?.tokenId == 0, details2?.tokenId?.description ?? "-") + XCTAssert(details2?.destination == "KT1V5XKmeypanMS9pR65REpqmVejWBZURuuT", details2?.destination ?? "-") + + + let fa1ForFa2Data = MockConstants.jsonStub(fromFilename: "3route_v4_fa1-for-fa2") + let fa1ForFa2Json = (try? decoder.decode([OperationTransaction].self, from: fa1ForFa2Data)) ?? [] + XCTAssert(fa1ForFa2Json.count > 0) + + let details3 = OperationFactory.Extractor.firstNonZeroTokenTransferAmount(operations: fa1ForFa2Json) + XCTAssert(details3?.tokenContract == "KT1Ha4yFVeyzw6KRAdkzq6TxDHB97KG4pZe8", details3?.tokenContract ?? "-") + XCTAssert(details3?.rpcAmount == "400000", details3?.rpcAmount ?? "-") + XCTAssert(details3?.tokenId == nil, details3?.tokenId?.description ?? "-") + XCTAssert(details3?.destination == "KT1V5XKmeypanMS9pR65REpqmVejWBZURuuT", details3?.destination ?? "-") + } + + func testExtractorsCrunchyStake() { + let decoder = JSONDecoder() + + let jsonData = MockConstants.jsonStub(fromFilename: "crunchy-stake") + let jsonOperations = (try? decoder.decode([OperationTransaction].self, from: jsonData)) ?? [] + XCTAssert(jsonOperations.count > 0) + + let details1 = OperationFactory.Extractor.firstNonZeroTokenTransferAmount(operations: jsonOperations) + XCTAssert(details1?.tokenContract == "KT1UQVEDf4twF2eMbrCKQAxN7YYunTAiCTTm", details1?.tokenContract ?? "-") + XCTAssert(details1?.rpcAmount == "1146068835831283", details1?.rpcAmount ?? "-") + XCTAssert(details1?.tokenId == 0, details1?.tokenId?.description ?? "-") + XCTAssert(details1?.destination == "KT1L1WZgdsfjEyP5T4ZCYVvN5vgzrNbu18kX", details1?.destination ?? "-") + } + + func testExtractorsObjktOffer() { + let decoder = JSONDecoder() + + let jsonData = MockConstants.jsonStub(fromFilename: "objkt-offer-fa1") + let jsonOperations = (try? decoder.decode([OperationTransaction].self, from: jsonData)) ?? [] + XCTAssert(jsonOperations.count > 0) + + let details1 = OperationFactory.Extractor.firstNonZeroTokenTransferAmount(operations: jsonOperations) + XCTAssert(details1?.tokenContract == "KT1LN4LPSqTMS7Sd2CJw4bbDGRkMv2t68Fy9", details1?.tokenContract ?? "-") + XCTAssert(details1?.rpcAmount == "478000", details1?.rpcAmount ?? "-") + XCTAssert(details1?.tokenId == nil, details1?.tokenId?.description ?? "-") + XCTAssert(details1?.destination == "KT1Xjap1TwmDR1d8yEd8ErkraAj2mbdMrPZY", details1?.destination ?? "-") + } + + func testExtractorsObjktBid() { + let decoder = JSONDecoder() + + let jsonData = MockConstants.jsonStub(fromFilename: "objkt-bid") + let jsonOperations = (try? decoder.decode([OperationTransaction].self, from: jsonData)) ?? [] + XCTAssert(jsonOperations.count > 0) + + let details1 = OperationFactory.Extractor.firstNonZeroTokenTransferAmount(operations: jsonOperations) + XCTAssert(details1?.tokenContract == "KT1TjnZYs5CGLbmV6yuW169P8Pnr9BiVwwjz", details1?.tokenContract ?? "-") + XCTAssert(details1?.rpcAmount == "201000000", details1?.rpcAmount ?? "-") + XCTAssert(details1?.tokenId == nil, details1?.tokenId?.description ?? "-") + XCTAssert(details1?.destination == "KT18iSHoRW1iogamADWwQSDoZa3QkN4izkqj", details1?.destination ?? "-") + } + + func testExtractorsObjktBidWithWrap() { + let decoder = JSONDecoder() + + let jsonData = MockConstants.jsonStub(fromFilename: "objkt-bid-with-wrap") + let jsonOperations = (try? decoder.decode([OperationTransaction].self, from: jsonData)) ?? [] + XCTAssert(jsonOperations.count > 0) + + let details1 = OperationFactory.Extractor.firstNonZeroTokenTransferAmount(operations: jsonOperations) + XCTAssert(details1?.tokenContract == "KT1TjnZYs5CGLbmV6yuW169P8Pnr9BiVwwjz", details1?.tokenContract ?? "-") + XCTAssert(details1?.rpcAmount == "201000000", details1?.rpcAmount ?? "-") + XCTAssert(details1?.tokenId == nil, details1?.tokenId?.description ?? "-") + XCTAssert(details1?.destination == "KT18iSHoRW1iogamADWwQSDoZa3QkN4izkqj", details1?.destination ?? "-") + } + + func testExtractorsMultiSendInListParam() { + let decoder = JSONDecoder() - let totalXTZ = OperationFactory.Extractor.totalXTZAmountForContractCall(operations: xtzOpsCopy) - XCTAssert(totalXTZ.description == "2", totalXTZ.description) + let jsonData = MockConstants.jsonStub(fromFilename: "operation-factory-extractor-multiple-send-in-param") + let jsonOperations = (try? decoder.decode([OperationTransaction].self, from: jsonData)) ?? [] + XCTAssert(jsonOperations.count > 0) + let details1 = OperationFactory.Extractor.isFaTokenTransfer(operations: jsonOperations) // operation is multiple sends in a single michelson param, for now, thats not supported as a "send" + XCTAssert(details1 == nil) } } diff --git a/Tests/KukaiCoreSwiftTests/MockConstants.swift b/Tests/KukaiCoreSwiftTests/MockConstants.swift index 004cdb26..8593e586 100644 --- a/Tests/KukaiCoreSwiftTests/MockConstants.swift +++ b/Tests/KukaiCoreSwiftTests/MockConstants.swift @@ -45,7 +45,8 @@ public struct MockConstants { mockURLSession = URLSession(configuration: sessionConfig) // Setup URL mocks - let baseURL = config.primaryNodeURL + let baseURL = config.nodeURLs[0] + let secondBaseURL = config.nodeURLs[1] let bcdURL = config.betterCallDevURL let tzktURL = config.tzktURL let bakingBadURL = URL(string: "https://api.baking-bad.org/")! @@ -125,6 +126,12 @@ public struct MockConstants { tzktDelegatesURL.appendQueryItem(name: "sort.desc", value: "stakingBalance") tzktDelegatesURL.appendQueryItem(name: "limit", value: 10) + var simulateURL1 = baseURL.appendingPathComponent("chains/main/blocks/head/helpers/scripts/simulate_operation") + simulateURL1.appendQueryItem(name: "version", value: "0") + + var simulateURL2 = secondBaseURL.appendingPathComponent("chains/main/blocks/head/helpers/scripts/simulate_operation") + simulateURL2.appendQueryItem(name: "version", value: "0") + // Format [ URL: ( Data?, HTTPURLResponse? ) ] MockURLProtocol.mockURLs = [ @@ -137,9 +144,11 @@ public struct MockConstants { baseURL.appendingPathComponent("chains/main/blocks/head"): (MockConstants.jsonStub(fromFilename: "head"), MockConstants.http200), baseURL.appendingPathComponent("chains/main/blocks/head~3"): (MockConstants.jsonStub(fromFilename: "head"), MockConstants.http200), baseURL.appendingPathComponent("chains/main/blocks/head/helpers/scripts/run_operation"): (MockConstants.jsonStub(fromFilename: "run_operation"), MockConstants.http200), + secondBaseURL.appendingPathComponent("chains/main/blocks/head/helpers/scripts/run_operation"): (MockConstants.jsonStub(fromFilename: "run_operation"), MockConstants.http200), baseURL.appendingPathComponent("chains/main/blocks/head/helpers/forge/operations"): (MockConstants.jsonStub(fromFilename: "forge"), MockConstants.http200), // Parse is handled inside MockURLProtocol due to its special requirements baseURL.appendingPathComponent("chains/main/blocks/head/helpers/preapply/operations"): (MockConstants.jsonStub(fromFilename: "preapply"), MockConstants.http200), + secondBaseURL.appendingPathComponent("chains/main/blocks/head/helpers/preapply/operations"): (MockConstants.jsonStub(fromFilename: "preapply"), MockConstants.http200), baseURL.appendingPathComponent("injection/operation"): (MockConstants.jsonStub(fromFilename: "inject"), MockConstants.http200), baseURL.appendingPathComponent("chains/main/blocks/head/context/contracts/tz1Ue76bLW7boAcJEZf2kSGcamdBKVi4Kpss/balance"): (MockConstants.jsonStub(fromFilename: "balance"), MockConstants.http200), baseURL.appendingPathComponent("chains/main/blocks/head/context/contracts/tz1Ue76bLW7boAcJEZf2kSGcamdBKVi4Kpss/delegate"): (MockConstants.jsonStub(fromFilename: "delegate"), MockConstants.http200), @@ -220,6 +229,22 @@ public struct MockConstants { (MockConstants.jsonStub(fromFilename: "objkt_collections_response_2"), MockConstants.http200), MockPostUrlKey(url: URL(string: "https://data.objkt.com/v3/graphql")!, requestData: MockConstants.jsonStub(fromFilename: "objkt_token_request")): (MockConstants.jsonStub(fromFilename: "objkt_token_response"), MockConstants.http200), + + + // simulate_operation + MockPostUrlKey(url: simulateURL1, requestData: MockConstants.jsonStub(fromFilename: "simulate_operation-request1")): + (MockConstants.jsonStub(fromFilename: "simulate_operation-response1"), MockConstants.http200), + MockPostUrlKey(url: simulateURL1, requestData: MockConstants.jsonStub(fromFilename: "simulate_operation-request3")): + (MockConstants.jsonStub(fromFilename: "simulate_operation-response1"), MockConstants.http200), + MockPostUrlKey(url: simulateURL2, requestData: MockConstants.jsonStub(fromFilename: "simulate_operation-request2")): + (MockConstants.jsonStub(fromFilename: "simulate_operation-response1"), MockConstants.http200), + + MockPostUrlKey(url: simulateURL1, requestData: MockConstants.jsonStub(fromFilename: "simulate_operation-crunchy-stake-request")): + (MockConstants.jsonStub(fromFilename: "simulate_operation-crunchy-stake-response"), MockConstants.http200), + MockPostUrlKey(url: simulateURL1, requestData: MockConstants.jsonStub(fromFilename: "simulate_operation-crunchy-swap-request")): + (MockConstants.jsonStub(fromFilename: "simulate_operation-crunchy-swap-response"), MockConstants.http200), + MockPostUrlKey(url: simulateURL1, requestData: MockConstants.jsonStub(fromFilename: "simulate_operation-high-gas-low-storage-request")): + (MockConstants.jsonStub(fromFilename: "simulate_operation-high-gas-low-storage-response"), MockConstants.http200), ] config.urlSession = mockURLSession @@ -256,6 +281,7 @@ public struct MockConstants { // MARK: - Wallets public static let mnemonic = try! Mnemonic(seedPhrase: "rigid obscure hurry scene eyebrow decide empty annual hunt cute also base") + public static let shiftedMnemonic = try! Mnemonic(seedPhrase: "laugh come news visit ceiling network rich outdoor license enjoy govern drastic slight close panic kingdom wash bring electric convince fiber relief cash siren") public static let passphrase = "superSecurePassphrase" public static let messageToSign = "something very interesting that needs to be signed" @@ -312,6 +338,12 @@ public struct MockConstants { public static let derivationPath = "m/44'/1729'/0'/1'" } + public struct shiftedWallet { + public static let address = "tz2HpbGQcmU3UyusJ78Sbqeg9fYteamSMDGo" + public static let privateKey = "7d85c254fa624f29ae54e981295594212cba5767ebd5f763851d97c55b6a88d6" + public static let publicKey = "025b4cb98848c2288eda85a8083d07d595721e89d3694bd3fb2a4c497ceeac66ca" + } + // MARK: - Types diff --git a/Tests/KukaiCoreSwiftTests/MockObjects/MockTorus.swift b/Tests/KukaiCoreSwiftTests/MockObjects/MockTorus.swift index 684fe7a2..addb9735 100644 --- a/Tests/KukaiCoreSwiftTests/MockObjects/MockTorus.swift +++ b/Tests/KukaiCoreSwiftTests/MockObjects/MockTorus.swift @@ -12,6 +12,8 @@ import FetchNodeDetails public class MockCustomAuth: CustomAuth { + /* + // TODO: becoming too painful to keep updating this with every version change. Need to find a better solution override open func triggerLogin(controller: UIViewController? = nil, browserType: URLOpenerTypes = .asWebAuthSession, modalPresentationStyle: UIModalPresentationStyle = .fullScreen) async throws -> [String : Any] { guard let verifierType = self.subVerifierDetails.first?.loginProvider else { fatalError("can't find verifier") @@ -71,6 +73,7 @@ public class MockCustomAuth: CustomAuth { fatalError("Invalid verifier") } } + */ } /* diff --git a/Tests/KukaiCoreSwiftTests/MockURLProtocol.swift b/Tests/KukaiCoreSwiftTests/MockURLProtocol.swift index 193d572f..d6279bad 100644 --- a/Tests/KukaiCoreSwiftTests/MockURLProtocol.swift +++ b/Tests/KukaiCoreSwiftTests/MockURLProtocol.swift @@ -17,8 +17,8 @@ struct MockPostUrlKey: Hashable { class MockURLProtocol: URLProtocol { private static var lastForgeRequest: Data? = nil - private let forgeURL = MockConstants.shared.config.primaryNodeURL.appendingPathComponent("chains/main/blocks/head/helpers/forge/operations") - private let parseURL = MockConstants.shared.config.parseNodeURL!.appendingPathComponent("chains/main/blocks/head/helpers/parse/operations") + private let forgeURL = MockConstants.shared.config.nodeURLs[0].appendingPathComponent("chains/main/blocks/head/helpers/forge/operations") + private let parseURL = MockConstants.shared.config.nodeURLs[1].appendingPathComponent("chains/main/blocks/head/helpers/parse/operations") /// Dictionary maps URLs to tuples of data, and response @@ -41,11 +41,14 @@ class MockURLProtocol: URLProtocol { if let url = request.url { + let unencodedString = url.absoluteString.removingPercentEncoding ?? "" + let unencodedUrl = URL(string: unencodedString)! + if let body = request.httpBodyStreamData() { - self.handlePostURL(mockPostUrlKey: MockPostUrlKey(url: url, requestData: body)) + self.handlePostURL(mockPostUrlKey: MockPostUrlKey(url: unencodedUrl, requestData: body)) } else { - self.handleGetURL(url: url) + self.handleGetURL(url: unencodedUrl) } } @@ -112,6 +115,26 @@ class MockURLProtocol: URLProtocol { func handlePostURL(mockPostUrlKey: MockPostUrlKey) { + // Check if URL is in the error list first as many error URL's and Success URLs will be indentical + if let (data, response) = MockURLProtocol.errorURLs[mockPostUrlKey.url] { + + if let res = response { + self.client?.urlProtocol(self, didReceive: res, cacheStoragePolicy: .notAllowed) + } + + if let d = data { + self.client?.urlProtocol(self, didLoad: d) + } + + // remove it from the list + if let index = MockURLProtocol.errorURLs.index(forKey: mockPostUrlKey.url) { + MockURLProtocol.errorURLs.remove(at: index) + } + + self.client?.urlProtocolDidFinishLoading(self) + return + } + // Check if URL is in the error list first as many error URL's and Success URLs will be indentical if let (data, response) = MockURLProtocol.errorPostURLs[mockPostUrlKey] { @@ -151,18 +174,26 @@ class MockURLProtocol: URLProtocol { } - static func triggerGasExhaustedErrorOnRunOperation() { - let url = MockConstants.shared.config.primaryNodeURL.appendingPathComponent("chains/main/blocks/head/helpers/scripts/run_operation") + static func triggerGasExhaustedErrorOnSimulateOperation(nodeUrl: Int = 0) { + var url = MockConstants.shared.config.nodeURLs[nodeUrl].appendingPathComponent("chains/main/blocks/head/helpers/scripts/simulate_operation") + url.appendQueryItem(name: "version", value: "0") MockURLProtocol.errorURLs[url] = (data: MockConstants.jsonStub(fromFilename: "rpc_error_gas"), response: MockConstants.http200) } - static func triggerAssertErrorOnRunOperation() { - let url = MockConstants.shared.config.primaryNodeURL.appendingPathComponent("chains/main/blocks/head/helpers/scripts/run_operation") + static func triggerAssertErrorOnSimulateOperation(nodeUrl: Int = 0) { + var url = MockConstants.shared.config.nodeURLs[nodeUrl].appendingPathComponent("chains/main/blocks/head/helpers/scripts/simulate_operation") + url.appendQueryItem(name: "version", value: "0") MockURLProtocol.errorURLs[url] = (data: MockConstants.jsonStub(fromFilename: "rpc_error_assert"), response: MockConstants.http200) } - static func triggerCounterInFutureError() { - let url = MockConstants.shared.config.primaryNodeURL.appendingPathComponent("chains/main/blocks/head/helpers/preapply/operations") + static func triggerCounterInFutureError(nodeUrl: Int = 0) { + let url = MockConstants.shared.config.nodeURLs[nodeUrl].appendingPathComponent("chains/main/blocks/head/helpers/preapply/operations") MockURLProtocol.errorURLs[url] = (data: MockConstants.jsonStub(fromFilename: "rpc_error_counter-in-future"), response: MockConstants.http500) } + + static func triggerHttp500ErrorOnSimulateOperation(nodeUrl: Int = 0) { + var url = MockConstants.shared.config.nodeURLs[nodeUrl].appendingPathComponent("chains/main/blocks/head/helpers/scripts/simulate_operation") + url.appendQueryItem(name: "version", value: "0") + MockURLProtocol.errorURLs[url] = (data: nil, response: MockConstants.http500) + } } diff --git a/Tests/KukaiCoreSwiftTests/Models/Config/TezosNodeClientConfigTests.swift b/Tests/KukaiCoreSwiftTests/Models/Config/TezosNodeClientConfigTests.swift index 9ee36b80..63bc6a08 100644 --- a/Tests/KukaiCoreSwiftTests/Models/Config/TezosNodeClientConfigTests.swift +++ b/Tests/KukaiCoreSwiftTests/Models/Config/TezosNodeClientConfigTests.swift @@ -21,15 +21,15 @@ class TezosNodeClientConfigTests: XCTestCase { func testDefaults() { let config1 = TezosNodeClientConfig(withDefaultsForNetworkType: .testnet) - XCTAssert(config1.primaryNodeURL.absoluteString == "https://rpc.ghostnet.teztnets.xyz", config1.primaryNodeURL.absoluteString) - XCTAssert(config1.parseNodeURL?.absoluteString == "https://rpc.ghostnet.teztnets.xyz", config1.parseNodeURL?.absoluteString ?? "") + XCTAssert(config1.nodeURLs[0].absoluteString == "https://ghostnet.smartpy.io", config1.nodeURLs[0].absoluteString) + XCTAssert(config1.nodeURLs[1].absoluteString == "https://rpc.ghostnet.tzboot.net", config1.nodeURLs[1].absoluteString) XCTAssert(config1.betterCallDevURL.absoluteString == "https://api.better-call.dev/", config1.betterCallDevURL.absoluteString) XCTAssert(config1.tzktURL.absoluteString == "https://api.ghostnet.tzkt.io/", config1.tzktURL.absoluteString) XCTAssert(config1.forgingType == .local, "\(config1.forgingType)") let config2 = TezosNodeClientConfig(withDefaultsForNetworkType: .mainnet) - XCTAssert(config2.primaryNodeURL.absoluteString == "https://mainnet-tezos.giganode.io/", config2.primaryNodeURL.absoluteString) - XCTAssert(config2.parseNodeURL?.absoluteString == "https://tezos-prod.cryptonomic-infra.tech:443/", config2.parseNodeURL?.absoluteString ?? "") + XCTAssert(config2.nodeURLs[0].absoluteString == "https://mainnet.smartpy.io", config2.nodeURLs[0].absoluteString) + XCTAssert(config2.nodeURLs[1].absoluteString == "https://rpc.tzbeta.net", config2.nodeURLs[1].absoluteString) XCTAssert(config2.betterCallDevURL.absoluteString == "https://api.better-call.dev/", config2.betterCallDevURL.absoluteString) XCTAssert(config2.tzktURL.absoluteString == "https://api.tzkt.io/", config2.tzktURL.absoluteString) XCTAssert(config2.forgingType == .local, "\(config2.forgingType)") diff --git a/Tests/KukaiCoreSwiftTests/Models/Operation/OperationModelTests.swift b/Tests/KukaiCoreSwiftTests/Models/Operation/OperationModelTests.swift index 4a2a23da..75a81174 100644 --- a/Tests/KukaiCoreSwiftTests/Models/Operation/OperationModelTests.swift +++ b/Tests/KukaiCoreSwiftTests/Models/Operation/OperationModelTests.swift @@ -163,7 +163,6 @@ class OperationModelTests: XCTestCase { let op2 = OperationOrigination(source: MockConstants.defaultLinearWallet.address, balance: XTZAmount(fromNormalisedAmount: 2), code: "contract-code2", storage: "contract-initial-storage2") XCTAssert(op.source == MockConstants.defaultHdWallet.address) - XCTAssert(op.script == ["code": "contract-code", "storage": "contract-initial-storage"], "\(op.script)") XCTAssert(op.operationKind == .origination) XCTAssertFalse(op.isEqual(op2)) @@ -175,6 +174,67 @@ class OperationModelTests: XCTestCase { XCTAssert(readResult?.isEqual(op) ?? false) let _ = DiskService.delete(fileName: "OperationOrigination.txt") + + + + + let json = """ + { + "kind": "origination", + "source": "tz1abcdef", + "balance": "0", + "script": { + "code": [ + { + "prim": "parameter", + "args": [ + { + "prim": "unit" + } + ] + }, + { + "prim": "storage", + "args": [ + { + "prim": "unit" + } + ] + }, + { + "prim": "code", + "args": [ + [ + { + "prim": "DROP" + }, + { + "prim": "UNIT" + }, + { + "prim": "NIL", + "args": [ + { + "prim": "operation" + } + ] + }, + { + "prim": "PAIR" + } + ] + ] + } + ], + "storage": { + "prim": "Unit" + } + } + } + """ + + let jsonOp = try? JSONDecoder().decode(OperationOrigination.self, from: json.data(using: .utf8) ?? Data()) + XCTAssert(jsonOp != nil) } func testEndorsement() { @@ -312,4 +372,49 @@ class OperationModelTests: XCTestCase { let defaultFees5 = OperationFees.defaultFees(operationKind: .activate_account).allFees() XCTAssert(defaultFees5 == XTZAmount(fromNormalisedAmount: 0.001268), defaultFees5.normalisedRepresentation) } + + func testUnknownOperationFallback() { + let jsonString = """ + { + "kind": "somethingWeird", + "amount": "1000000", + "somethingVeryNew": "bingo", + "destination": "KT1CYkiSJtKgFNy6whArwpn3TsYe7iX9SwFu", + "parameters": { + "entrypoint": "wrap", + "value": { + "string": "tz1bJyyFMMWhwkdKSi7Ud8fimu72yfjNC44j" + } + } + } + """ + + let unknown = try? JSONDecoder().decode(OperationUnknown.self, from: (jsonString.data(using: .utf8) ?? Data())) + unknown?.source = "TZ1abcdef" + unknown?.counter = "14" + unknown?.operationFees = OperationFees(transactionFee: XTZAmount(fromNormalisedAmount: 0.14), gasLimit: 1400, storageLimit: 1452) + + + XCTAssert(unknown?.operationKind == .unknown, unknown?.operationKind.rawValue ?? "-") + XCTAssert(unknown?.unknownKind == "somethingWeird", unknown?.unknownKind ?? "-") + XCTAssert(unknown?.source == "TZ1abcdef", unknown?.source ?? "-") + + let propTest1 = unknown?.allOtherProperties["somethingVeryNew"] as? String + XCTAssert(propTest1 == "bingo", propTest1 ?? "-") + + let propTest2 = unknown?.allOtherProperties["destination"] as? String + XCTAssert(propTest2 == "KT1CYkiSJtKgFNy6whArwpn3TsYe7iX9SwFu", propTest2 ?? "-") + + + let encoder = JSONEncoder() + encoder.outputFormatting = .sortedKeys + + let data = try? encoder.encode(unknown) + let string = String(data: data ?? Data(), encoding: .utf8) + + let jsonOuput = """ + {"amount":"1000000","counter":"14","destination":"KT1CYkiSJtKgFNy6whArwpn3TsYe7iX9SwFu","fee":"140000","gas_limit":"1400","kind":"somethingWeird","parameters":{"entrypoint":"wrap","value":{"string":"tz1bJyyFMMWhwkdKSi7Ud8fimu72yfjNC44j"}},"somethingVeryNew":"bingo","source":"TZ1abcdef","storage_limit":"1452"} + """ + XCTAssert(string == jsonOuput, string ?? "-") + } } diff --git a/Tests/KukaiCoreSwiftTests/Models/RPCTests.swift b/Tests/KukaiCoreSwiftTests/Models/RPCTests.swift index 4366dbca..17d18ffd 100644 --- a/Tests/KukaiCoreSwiftTests/Models/RPCTests.swift +++ b/Tests/KukaiCoreSwiftTests/Models/RPCTests.swift @@ -30,11 +30,6 @@ class RPCTests: XCTestCase { XCTAssert(rpcForge?.endpoint == "chains/main/blocks/head/helpers/forge/operations", rpcForge?.endpoint ?? "-") XCTAssert(rpcForge?.isPost == true) XCTAssert(rpcForge?.responseType == String.self) - - if let subStr = rpcForge?.payload?.toHexString().prefix(50) { - XCTAssert(String(subStr) == "7b22636f6e74656e7473223a5b7b22616d6f756e74223a2231", String(subStr)) - } else { - XCTFail("Can't get substring") - } + XCTAssert(rpcForge?.payload?.bytes.count == 285, rpcForge?.payload?.bytes.count.description ?? "-") } } diff --git a/Tests/KukaiCoreSwiftTests/Models/RegularWalletTests.swift b/Tests/KukaiCoreSwiftTests/Models/RegularWalletTests.swift index 8d7bd61f..1eb92e3b 100644 --- a/Tests/KukaiCoreSwiftTests/Models/RegularWalletTests.swift +++ b/Tests/KukaiCoreSwiftTests/Models/RegularWalletTests.swift @@ -26,6 +26,13 @@ class RegularWalletTests: XCTestCase { XCTAssert(wallet?.publicKey.bytes.toHexString() == MockConstants.linearWalletEd255519.publicKey, wallet?.publicKey.bytes.toHexString() ?? "-") } + func testCreateWithShiftedMnemonic() { + let wallet = RegularWallet(withShiftedMnemonic: MockConstants.shiftedMnemonic, passphrase: "") + XCTAssert(wallet?.address == MockConstants.shiftedWallet.address, wallet?.address ?? "-") + XCTAssert(wallet?.privateKey.bytes.toHexString() == MockConstants.shiftedWallet.privateKey, wallet?.privateKey.bytes.toHexString() ?? "-") + XCTAssert(wallet?.publicKey.bytes.toHexString() == MockConstants.shiftedWallet.publicKey, wallet?.publicKey.bytes.toHexString() ?? "-") + } + func testCreateWithMnemonicLength() { let wallet1 = RegularWallet(withMnemonicLength: .twelve, passphrase: "") XCTAssert(wallet1?.mnemonic?.words.count == 12, "\(wallet1?.mnemonic?.words.count ?? -1)") @@ -67,4 +74,26 @@ class RegularWalletTests: XCTestCase { let encoded = MockConstants.defaultLinearWallet.publicKeyBase58encoded() XCTAssert(encoded == MockConstants.linearWalletEd255519.base58Encoded, encoded) } + + func testSecretKeyImport() { + let tz1UnencryptedSeed = RegularWallet(fromSecretKey: "edsk3KvXD8SVD9GCyU4jbzaFba2HZRad5pQ7ajL79n7rUoc3nfHv5t", passphrase: nil) + XCTAssert(tz1UnencryptedSeed?.address == "tz1Qvpsq7UZWyQ4yabf9wGpG97testZCjoCH", tz1UnencryptedSeed?.address ?? "-") + XCTAssert(tz1UnencryptedSeed?.privateKey.signingCurve == .ed25519, tz1UnencryptedSeed?.privateKey.signingCurve.rawValue ?? "-") + + let tz1UnencryptedSecret = RegularWallet(fromSecretKey: "edskRgQqEw17KMib89AzChu8DiJjmVeDfGmbCMpp7MpmhgTdNVvZ3TTaLfwNoux4hDDVeLxmEJxKiYE1cYp1Vgj6QATKaJa58L", passphrase: nil) + XCTAssert(tz1UnencryptedSecret?.address == "tz1Ue76bLW7boAcJEZf2kSGcamdBKVi4Kpss", tz1UnencryptedSecret?.address ?? "-") + XCTAssert(tz1UnencryptedSecret?.privateKey.signingCurve == .ed25519, tz1UnencryptedSecret?.privateKey.signingCurve.rawValue ?? "-") + + let tz1EncryptedSecret = RegularWallet(fromSecretKey: "edesk1L8uVSYd3aug7jbeynzErQTnBxq6G6hJwmeue3yUBt11wp3ULXvcLwYRzDp4LWWvRFNJXRi3LaN7WGiEGhh", passphrase: "pa55word") + XCTAssert(tz1EncryptedSecret?.address == "tz1XztestvvcXSQZUbZav5YgVLRQbxC4GuMF", tz1EncryptedSecret?.address ?? "-") + XCTAssert(tz1EncryptedSecret?.privateKey.signingCurve == .ed25519, tz1EncryptedSecret?.privateKey.signingCurve.rawValue ?? "-") + + let tz2UnencryptedSecret = RegularWallet(fromSecretKey: "spsk29hF9oJ6koNnnJMs1rXz4ynBs8hL8FyubTNPCu2tCVP5beGDbw", passphrase: nil) + XCTAssert(tz2UnencryptedSecret?.address == "tz2RbUirt95UQHa9YyxcLj9GusNctxwn3Xi1", tz2UnencryptedSecret?.address ?? "-") + XCTAssert(tz2UnencryptedSecret?.privateKey.signingCurve == .secp256k1, tz2UnencryptedSecret?.privateKey.signingCurve.rawValue ?? "-") + + let tz2EncryptedSecret = RegularWallet(fromSecretKey: "spesk1S5bMTCyH9z4mHSpnbn6DBY831DD6Rxgq7ANfEKkngoHSwy6B5odh942TKL6DtLbfTkpTHfSTAQu2d72Qd6", passphrase: "pa55word") + XCTAssert(tz2EncryptedSecret?.address == "tz2C8APAjnQfffdkHssxdFRctkD1iPLGaGEg", tz2EncryptedSecret?.address ?? "-") + XCTAssert(tz2EncryptedSecret?.privateKey.signingCurve == .secp256k1, tz2EncryptedSecret?.privateKey.signingCurve.rawValue ?? "-") + } } diff --git a/Tests/KukaiCoreSwiftTests/Models/TorusWalletTests.swift b/Tests/KukaiCoreSwiftTests/Models/TorusWalletTests.swift index 86043cb4..54182d7a 100644 --- a/Tests/KukaiCoreSwiftTests/Models/TorusWalletTests.swift +++ b/Tests/KukaiCoreSwiftTests/Models/TorusWalletTests.swift @@ -7,6 +7,7 @@ import XCTest @testable import KukaiCoreSwift +@testable import CustomAuth class TorusWalletTests: XCTestCase { diff --git a/Tests/KukaiCoreSwiftTests/Models/TzKTBakerTests.swift b/Tests/KukaiCoreSwiftTests/Models/TzKTBakerTests.swift index b7f1e04c..8459275e 100644 --- a/Tests/KukaiCoreSwiftTests/Models/TzKTBakerTests.swift +++ b/Tests/KukaiCoreSwiftTests/Models/TzKTBakerTests.swift @@ -32,7 +32,7 @@ final class TzKTBakerTests: XCTestCase { rewardStruct: [ TzKTBakerConfigIntValue(cycle: 500, value: 981) ]) - let baker2 = TzKTBaker(address: "tz1abc123", name: "Baking Benjamins", logo: nil, balance: 123, stakingBalance: 123, stakingCapacity: 123, maxStakingBalance: 123, freeSpace: 123, fee: 0.5, minDelegation: 123, payoutDelay: 1, payoutPeriod: 1, openForDelegation: true, estimatedRoi: 5.5, serviceHealth: .active, payoutTiming: .stable, payoutAccuracy: .precise, config: config) + let baker2 = TzKTBaker(address: "tz1abc123", name: "Baking Benjamins", logo: nil, balance: 123, stakingBalance: 123, stakingCapacity: 123, maxStakingBalance: 123, freeSpace: 123, fee: 0.5, minDelegation: 123, payoutDelay: 1, payoutPeriod: 1, openForDelegation: true, estimatedRoi: 5.5, serviceHealth: .active, serviceType: "tezos_only", payoutTiming: .stable, payoutAccuracy: .precise, config: config) XCTAssert(baker2.name == "Baking Benjamins") XCTAssert(baker2.config != nil) XCTAssert(baker2.config?.latesetFee() == 14) diff --git a/Tests/KukaiCoreSwiftTests/Models/TzKTTransactionTests.swift b/Tests/KukaiCoreSwiftTests/Models/TzKTTransactionTests.swift index e29e04aa..32c2ad0a 100644 --- a/Tests/KukaiCoreSwiftTests/Models/TzKTTransactionTests.swift +++ b/Tests/KukaiCoreSwiftTests/Models/TzKTTransactionTests.swift @@ -79,9 +79,9 @@ final class TzKTTransactionTests: XCTestCase { func testPlaceholders() { let source = WalletMetadata(address: "tz1abc", hdWalletGroupName: nil, type: .hd, children: [], isChild: false, isWatchOnly: false, bas58EncodedPublicKey: "", backedUp: true) - let placeholder1 = TzKTTransaction.placeholder(withStatus: .unconfirmed, opHash: "abc123", type: .transaction, counter: 0, fromWallet: source, newDelegate: TzKTAddress(alias: "Baking Benjamins", address: "tz1YgDUQV2eXm8pUWNz3S5aWP86iFzNp4jnD")) + let placeholder1 = TzKTTransaction.placeholder(withStatus: .unconfirmed, id: 567, opHash: "abc123", type: .transaction, counter: 0, fromWallet: source, newDelegate: TzKTAddress(alias: "Baking Benjamins", address: "tz1YgDUQV2eXm8pUWNz3S5aWP86iFzNp4jnD")) - let placeholder2 = TzKTTransaction.placeholder(withStatus: .unconfirmed, opHash: "def456", type: .transaction, counter: 1, fromWallet: source, destination: TzKTAddress(alias: nil, address: "tz1def"), xtzAmount: .init(fromNormalisedAmount: 4.17, decimalPlaces: 6), parameters: nil, primaryToken: nil) + let placeholder2 = TzKTTransaction.placeholder(withStatus: .unconfirmed, id: 456, opHash: "def456", type: .transaction, counter: 1, fromWallet: source, destination: TzKTAddress(alias: nil, address: "tz1def"), xtzAmount: .init(fromNormalisedAmount: 4.17, decimalPlaces: 6), parameters: nil, primaryToken: nil) XCTAssert(placeholder1.newDelegate?.address == "tz1YgDUQV2eXm8pUWNz3S5aWP86iFzNp4jnD", placeholder1.newDelegate?.address ?? "-") XCTAssert(placeholder2.amount.description == "4.17", placeholder2.amount.description) diff --git a/Tests/KukaiCoreSwiftTests/Services/DAppHelperServiceTests.swift b/Tests/KukaiCoreSwiftTests/Services/DAppHelperServiceTests.swift index 2b0a3f86..d2549242 100644 --- a/Tests/KukaiCoreSwiftTests/Services/DAppHelperServiceTests.swift +++ b/Tests/KukaiCoreSwiftTests/Services/DAppHelperServiceTests.swift @@ -24,7 +24,7 @@ class DAppHelperServiceTests: XCTestCase { expectation.fulfill() } - wait(for: [expectation], timeout: 10) + wait(for: [expectation], timeout: 120) } func testPendingRewardsBulk() { @@ -44,6 +44,6 @@ class DAppHelperServiceTests: XCTestCase { expectation.fulfill() } - wait(for: [expectation], timeout: 10) + wait(for: [expectation], timeout: 120) } } diff --git a/Tests/KukaiCoreSwiftTests/Services/ErrorHandlingServiceTests.swift b/Tests/KukaiCoreSwiftTests/Services/ErrorHandlingServiceTests.swift index 8fdc5972..83ccac29 100644 --- a/Tests/KukaiCoreSwiftTests/Services/ErrorHandlingServiceTests.swift +++ b/Tests/KukaiCoreSwiftTests/Services/ErrorHandlingServiceTests.swift @@ -16,11 +16,11 @@ class ErrorHandlingServiceTests: XCTestCase { } func testStaticConstrutors() { - let error1 = KukaiError.rpcError(rpcErrorString: "testing RPC string", andFailWith: nil) + let error1 = KukaiError.rpcError(rpcErrorString: "testing RPC string", andFailWith: nil, requestURL: nil) XCTAssert(error1.rpcErrorString == "testing RPC string", error1.rpcErrorString ?? "-") XCTAssert(error1.description == "RPC: testing RPC string", error1.description) - let error2 = KukaiError.rpcError(rpcErrorString: "testing RPC string", andFailWith: FailWith(string: nil, int: "1", args: nil)) + let error2 = KukaiError.rpcError(rpcErrorString: "testing RPC string", andFailWith: FailWith(string: nil, int: "1", args: nil), requestURL: nil) XCTAssert(error2.rpcErrorString == "testing RPC string", error2.rpcErrorString ?? "-") XCTAssert(error2.description == "RPC: testing RPC string", error2.description) @@ -98,12 +98,12 @@ class ErrorHandlingServiceTests: XCTestCase { let ops = [ OperationResponse(contents: [ - OperationResponseContent(kind: "", source: nil, metadata: operationMetadataWithError), - OperationResponseContent(kind: "", source: nil, metadata: operationMetadataWithoutError) + OperationResponseContent(kind: "", source: nil, metadata: operationMetadataWithError, destination: nil, amount: nil, fee: nil, balance: nil), + OperationResponseContent(kind: "", source: nil, metadata: operationMetadataWithoutError, destination: nil, amount: nil, fee: nil, balance: nil) ]) ] - let containsErrors1 = ErrorHandlingService.searchOperationResponseForErrors(ops) + let containsErrors1 = ErrorHandlingService.searchOperationResponseForErrors(ops, requestURL: nil) XCTAssert(containsErrors1?.errorType == .rpc) XCTAssert(containsErrors1?.rpcErrorString == "gas_exhausted.operation", containsErrors1?.rpcErrorString ?? "-") XCTAssert(containsErrors1?.description == "RPC: gas_exhausted.operation", containsErrors1?.description ?? "-") @@ -119,12 +119,12 @@ class ErrorHandlingServiceTests: XCTestCase { let ops = [ OperationResponse(contents: [ - OperationResponseContent(kind: "", source: nil, metadata: operationMetadataWithError), - OperationResponseContent(kind: "", source: nil, metadata: operationMetadataWithoutError) + OperationResponseContent(kind: "", source: nil, metadata: operationMetadataWithError, destination: nil, amount: nil, fee: nil, balance: nil), + OperationResponseContent(kind: "", source: nil, metadata: operationMetadataWithoutError, destination: nil, amount: nil, fee: nil, balance: nil) ]) ] - let containsErrors1 = ErrorHandlingService.searchOperationResponseForErrors(ops) + let containsErrors1 = ErrorHandlingService.searchOperationResponseForErrors(ops, requestURL: nil) XCTAssert(containsErrors1?.errorType == .rpc) XCTAssert(containsErrors1?.rpcErrorString == "A FAILWITH instruction was reached: {\"int\": 14}", containsErrors1?.rpcErrorString ?? "-") XCTAssert(containsErrors1?.description == "RPC: A FAILWITH instruction was reached: {\"int\": 14}", containsErrors1?.description ?? "-") @@ -138,7 +138,7 @@ class ErrorHandlingServiceTests: XCTestCase { return } - let result2 = ErrorHandlingService.searchOperationResponseForErrors(opResponse) + let result2 = ErrorHandlingService.searchOperationResponseForErrors(opResponse, requestURL: nil) XCTAssert(result2?.rpcErrorString == "gas_exhausted.operation", result2?.rpcErrorString ?? "-") XCTAssert(result2?.description == "RPC: gas_exhausted.operation", result2?.description ?? "-") @@ -152,7 +152,7 @@ class ErrorHandlingServiceTests: XCTestCase { return } - let result = ErrorHandlingService.searchOperationResponseForErrors(opResponse) + let result = ErrorHandlingService.searchOperationResponseForErrors(opResponse, requestURL: nil) XCTAssert(result?.rpcErrorString == "A FAILWITH instruction was reached: {\"string\": Dex/wrong-min-out}", result?.rpcErrorString ?? "-") XCTAssert(result?.description == "RPC: A FAILWITH instruction was reached: {\"string\": Dex/wrong-min-out}", result?.description ?? "-") } @@ -165,7 +165,7 @@ class ErrorHandlingServiceTests: XCTestCase { return } - let result = ErrorHandlingService.searchOperationResponseForErrors(opResponse) + let result = ErrorHandlingService.searchOperationResponseForErrors(opResponse, requestURL: nil) XCTAssert(result?.rpcErrorString == "A FAILWITH instruction was reached: {\"args\": [[\"string\": \"NotEnoughBalance\"]]}", result?.rpcErrorString ?? "-") XCTAssert(result?.description == "RPC: A FAILWITH instruction was reached: {\"args\": [[\"string\": \"NotEnoughBalance\"]]}", result?.description ?? "-") } diff --git a/Tests/KukaiCoreSwiftTests/Services/FeeEstimatorServiceTests.swift b/Tests/KukaiCoreSwiftTests/Services/FeeEstimatorServiceTests.swift index d7a81e1d..d79d7bfd 100644 --- a/Tests/KukaiCoreSwiftTests/Services/FeeEstimatorServiceTests.swift +++ b/Tests/KukaiCoreSwiftTests/Services/FeeEstimatorServiceTests.swift @@ -41,7 +41,7 @@ class FeeEstimatorServiceTests: XCTestCase { expectation.fulfill() } - wait(for: [expectation], timeout: 10) + wait(for: [expectation], timeout: 120) } func testEstimationWithSuggestedGas() { @@ -62,7 +62,7 @@ class FeeEstimatorServiceTests: XCTestCase { case .success(let result): XCTAssert(result.operations.count == 2) XCTAssert(result.operations[0].operationFees.allFees() == XTZAmount(fromNormalisedAmount: 0), result.operations[0].operationFees.allFees().description) - XCTAssert(result.operations[1].operationFees.allFees() == XTZAmount(fromNormalisedAmount: 0.014339), result.operations[1].operationFees.allFees().description) + XCTAssert(result.operations[1].operationFees.allFees() == XTZAmount(fromNormalisedAmount: 0.014442), result.operations[1].operationFees.allFees().description) case .failure(let error): XCTFail(error.description) @@ -71,6 +71,139 @@ class FeeEstimatorServiceTests: XCTestCase { expectation.fulfill() } - wait(for: [expectation], timeout: 10) + wait(for: [expectation], timeout: 120) + } + + func testJSONPayload1() { + let decoder = JSONDecoder() + + let jsonDataRequest1 = MockConstants.jsonStub(fromFilename: "simulate_operation-crunchy-stake-operations") + let jsonRequestOps1 = (try? decoder.decode([OperationTransaction].self, from: jsonDataRequest1)) ?? [] + XCTAssert(jsonRequestOps1.count != 0) + + let expectation1 = XCTestExpectation(description: "Estimation service") + let address = MockConstants.defaultHdWallet.address + let key = MockConstants.defaultHdWallet.publicKeyBase58encoded() + estimationService.estimate(operations: jsonRequestOps1, operationMetadata: MockConstants.operationMetadata, constants: MockConstants.networkConstants, walletAddress: address, base58EncodedPublicKey: key) { result in + switch result { + case .success(let result): + XCTAssert(result.operations.count == 3) + XCTAssert(result.operations[0].operationFees.gasLimit == 770, result.operations[0].operationFees.gasLimit.description) + XCTAssert(result.operations[0].operationFees.storageLimit == 0, result.operations[0].operationFees.storageLimit.description) + XCTAssert(result.operations[0].operationFees.allFees().normalisedRepresentation == "0", result.operations[0].operationFees.allFees().normalisedRepresentation) + XCTAssert(result.operations[1].operationFees.gasLimit == 6083, result.operations[1].operationFees.gasLimit.description) + XCTAssert(result.operations[1].operationFees.storageLimit == 1324, result.operations[1].operationFees.storageLimit.description) + XCTAssert(result.operations[1].operationFees.allFees().normalisedRepresentation == "0", result.operations[1].operationFees.allFees().normalisedRepresentation) + XCTAssert(result.operations[2].operationFees.gasLimit == 659, result.operations[2].operationFees.gasLimit.description) + XCTAssert(result.operations[2].operationFees.storageLimit == 0, result.operations[2].operationFees.storageLimit.description) + XCTAssert(result.operations[2].operationFees.allFees().normalisedRepresentation == "0.332402", result.operations[2].operationFees.allFees().normalisedRepresentation) + + let totalGas = result.operations.map({ $0.operationFees.gasLimit }).reduce(0, +) + XCTAssert(totalGas == 7512, totalGas.description) + + let totalStorage = result.operations.map({ $0.operationFees.storageLimit }).reduce(0, +) + XCTAssert(totalStorage == 1324, totalStorage.description) + + let totalFee = result.operations.map({ $0.operationFees.allFees() }).reduce(XTZAmount.zero(), +) + XCTAssert(totalFee.normalisedRepresentation == "0.332402", totalFee.normalisedRepresentation) + + case .failure(let error): + XCTFail(error.description) + } + + expectation1.fulfill() + } + + wait(for: [expectation1], timeout: 120) + } + + + func testJSONPayload2() { + let decoder = JSONDecoder() + + let jsonDataRequest1 = MockConstants.jsonStub(fromFilename: "simulate_operation-crunchy-swap-operations") + let jsonRequestOps1 = (try? decoder.decode([OperationTransaction].self, from: jsonDataRequest1)) ?? [] + XCTAssert(jsonRequestOps1.count != 0) + + let expectation1 = XCTestExpectation(description: "Estimation service") + let address = MockConstants.defaultHdWallet.address + let key = MockConstants.defaultHdWallet.publicKeyBase58encoded() + estimationService.estimate(operations: jsonRequestOps1, operationMetadata: MockConstants.operationMetadata, constants: MockConstants.networkConstants, walletAddress: address, base58EncodedPublicKey: key) { result in + switch result { + case .success(let result): + XCTAssert(result.operations.count == 10, result.operations.count.description) + XCTAssert(result.operations[0].operationFees.gasLimit == 13245, result.operations[0].operationFees.gasLimit.description) + XCTAssert(result.operations[0].operationFees.storageLimit == 47, result.operations[0].operationFees.storageLimit.description) + XCTAssert(result.operations[0].operationFees.allFees().normalisedRepresentation == "0", result.operations[0].operationFees.allFees().normalisedRepresentation) + XCTAssert(result.operations[1].operationFees.gasLimit == 1557, result.operations[1].operationFees.gasLimit.description) + XCTAssert(result.operations[1].operationFees.storageLimit == 30, result.operations[1].operationFees.storageLimit.description) + XCTAssert(result.operations[1].operationFees.allFees().normalisedRepresentation == "0", result.operations[1].operationFees.allFees().normalisedRepresentation) + XCTAssert(result.operations[2].operationFees.gasLimit == 10185, result.operations[2].operationFees.gasLimit.description) + XCTAssert(result.operations[2].operationFees.storageLimit == 0, result.operations[2].operationFees.storageLimit.description) + XCTAssert(result.operations[2].operationFees.allFees().normalisedRepresentation == "0", result.operations[2].operationFees.allFees().normalisedRepresentation) + + let totalGas = result.operations.map({ $0.operationFees.gasLimit }).reduce(0, +) + XCTAssert(totalGas == 103696, totalGas.description) + + let totalStorage = result.operations.map({ $0.operationFees.storageLimit }).reduce(0, +) + XCTAssert(totalStorage == 77, totalStorage.description) + + let totalFee = result.operations.map({ $0.operationFees.allFees() }).reduce(XTZAmount.zero(), +) + XCTAssert(totalFee.normalisedRepresentation == "0.031492", totalFee.normalisedRepresentation) + + case .failure(let error): + XCTFail(error.description) + } + + expectation1.fulfill() + } + + wait(for: [expectation1], timeout: 120) + } + + // TODO: add teset with and without reveal + + // Test that if a dApp suggests a high gas amount, but a low storage amount. That we take the gas, but use our own higher estimated storage + func testJSONPayload3() { + let decoder = JSONDecoder() + + let jsonDataRequest1 = MockConstants.jsonStub(fromFilename: "simulate_operation-high-gas-low-storage-operations") + let jsonRequestOps1 = (try? decoder.decode([OperationTransaction].self, from: jsonDataRequest1)) ?? [] + XCTAssert(jsonRequestOps1.count != 0) + + let expectation1 = XCTestExpectation(description: "Estimation service") + let address = MockConstants.defaultHdWallet.address + let key = MockConstants.defaultHdWallet.publicKeyBase58encoded() + estimationService.estimate(operations: jsonRequestOps1, operationMetadata: MockConstants.operationMetadata, constants: MockConstants.networkConstants, walletAddress: address, base58EncodedPublicKey: key) { result in + switch result { + case .success(let result): + XCTAssert(result.operations.count == 3, result.operations.count.description) + XCTAssert(result.operations[0].operationFees.gasLimit == 16000, result.operations[0].operationFees.gasLimit.description) + XCTAssert(result.operations[0].operationFees.storageLimit == 385, result.operations[0].operationFees.storageLimit.description) + XCTAssert(result.operations[0].operationFees.allFees().normalisedRepresentation == "0", result.operations[0].operationFees.allFees().normalisedRepresentation) + XCTAssert(result.operations[1].operationFees.gasLimit == 32000, result.operations[1].operationFees.gasLimit.description) + XCTAssert(result.operations[1].operationFees.storageLimit == 384, result.operations[1].operationFees.storageLimit.description) + XCTAssert(result.operations[1].operationFees.allFees().normalisedRepresentation == "0", result.operations[1].operationFees.allFees().normalisedRepresentation) + XCTAssert(result.operations[2].operationFees.gasLimit == 12000, result.operations[2].operationFees.gasLimit.description) + XCTAssert(result.operations[2].operationFees.storageLimit == 0, result.operations[2].operationFees.storageLimit.description) + XCTAssert(result.operations[2].operationFees.allFees().normalisedRepresentation == "0.200317", result.operations[2].operationFees.allFees().normalisedRepresentation) + + let totalGas = result.operations.map({ $0.operationFees.gasLimit }).reduce(0, +) + XCTAssert(totalGas == 60000, totalGas.description) + + let totalStorage = result.operations.map({ $0.operationFees.storageLimit }).reduce(0, +) + XCTAssert(totalStorage == 769, totalStorage.description) + + let totalFee = result.operations.map({ $0.operationFees.allFees() }).reduce(XTZAmount.zero(), +) + XCTAssert(totalFee.normalisedRepresentation == "0.200317", totalFee.normalisedRepresentation) + + case .failure(let error): + XCTFail(error.description) + } + + expectation1.fulfill() + } + + wait(for: [expectation1], timeout: 120) } } diff --git a/Tests/KukaiCoreSwiftTests/Services/MediaProxySerivceTests.swift b/Tests/KukaiCoreSwiftTests/Services/MediaProxySerivceTests.swift index 3ce42690..8fea58e1 100644 --- a/Tests/KukaiCoreSwiftTests/Services/MediaProxySerivceTests.swift +++ b/Tests/KukaiCoreSwiftTests/Services/MediaProxySerivceTests.swift @@ -26,35 +26,39 @@ class MediaProxySerivceTests: XCTestCase { } func testURLFormatters() { - let url1 = MediaProxyService.url(fromUriString: MediaProxySerivceTests.ipfsURIWithoutExtension, ofFormat: .small) - let url2 = MediaProxyService.url(fromUriString: MediaProxySerivceTests.ipfsURIWithExtension, ofFormat: .medium) - let url3 = MediaProxyService.url(fromUriString: MediaProxySerivceTests.httpsURI, ofFormat: .gallery) - let url4 = MediaProxyService.url(fromUriString: MediaProxySerivceTests.ipfsURIWithoutExtension, ofFormat: .raw) + let url1 = MediaProxyService.url(fromUriString: MediaProxySerivceTests.ipfsURIWithoutExtension, ofFormat: .mobile64) + let url2 = MediaProxyService.url(fromUriString: MediaProxySerivceTests.ipfsURIWithExtension, ofFormat: .mobile128) + let url3 = MediaProxyService.url(fromUriString: MediaProxySerivceTests.httpsURI, ofFormat: .mobile180) + let url4 = MediaProxyService.url(fromUriString: MediaProxySerivceTests.ipfsURIWithoutExtension, ofFormat: .mobile900) - XCTAssert(url1?.absoluteString == "https://static.tcinfra.net/media/small/ipfs/bafybeiatpitaej7bynhsequ5hl45jbtjft2nkkho74jfocvnw4vrqlhdea", url1?.absoluteString ?? "") - XCTAssert(url2?.absoluteString == "https://static.tcinfra.net/media/medium/ipfs/Qmczgp9juksRrzDkXUQQQFb9xwNDimv1gTy6kLjZqVNPoX/display/1012.png", url2?.absoluteString ?? "") - XCTAssert(url3?.absoluteString == "https://static.tcinfra.net/media/gallery/web/uxwing.com/wp-content/themes/uxwing/download/20-food-and-drinks/rice.png", url3?.absoluteString ?? "") - XCTAssert(url4?.absoluteString == "https://static.tcinfra.net/media/raw/ipfs/bafybeiatpitaej7bynhsequ5hl45jbtjft2nkkho74jfocvnw4vrqlhdea", url4?.absoluteString ?? "") + XCTAssert(url1?.absoluteString == "https://data.mantodev.com/media/mobile64/ipfs/bafybeiatpitaej7bynhsequ5hl45jbtjft2nkkho74jfocvnw4vrqlhdea", url1?.absoluteString ?? "") + XCTAssert(url2?.absoluteString == "https://data.mantodev.com/media/mobile128/ipfs/Qmczgp9juksRrzDkXUQQQFb9xwNDimv1gTy6kLjZqVNPoX/display/1012.png", url2?.absoluteString ?? "") + XCTAssert(url3?.absoluteString == "https://data.mantodev.com/media/mobile180/web/uxwing.com/wp-content/themes/uxwing/download/20-food-and-drinks/rice.png", url3?.absoluteString ?? "") + XCTAssert(url4?.absoluteString == "https://data.mantodev.com/media/mobile900/ipfs/bafybeiatpitaej7bynhsequ5hl45jbtjft2nkkho74jfocvnw4vrqlhdea", url4?.absoluteString ?? "") - let url5 = MediaProxyService.url(fromUri: URL(string: MediaProxySerivceTests.ipfsURIWithoutExtension), ofFormat: .medium) - let url6 = MediaProxyService.url(fromUri: URL(string: MediaProxySerivceTests.ipfsURIWithExtension), ofFormat: .medium) - let url7 = MediaProxyService.url(fromUri: URL(string: MediaProxySerivceTests.httpsURI), ofFormat: .medium) + let url5 = MediaProxyService.url(fromUri: URL(string: MediaProxySerivceTests.ipfsURIWithoutExtension), ofFormat: .mobile64) + let url6 = MediaProxyService.url(fromUri: URL(string: MediaProxySerivceTests.ipfsURIWithExtension), ofFormat: .mobile64) + let url7 = MediaProxyService.url(fromUri: URL(string: MediaProxySerivceTests.httpsURI), ofFormat: .mobile64) - XCTAssert(url5?.absoluteString == "https://static.tcinfra.net/media/medium/ipfs/bafybeiatpitaej7bynhsequ5hl45jbtjft2nkkho74jfocvnw4vrqlhdea", url5?.absoluteString ?? "") - XCTAssert(url6?.absoluteString == "https://static.tcinfra.net/media/medium/ipfs/Qmczgp9juksRrzDkXUQQQFb9xwNDimv1gTy6kLjZqVNPoX/display/1012.png", url6?.absoluteString ?? "") - XCTAssert(url7?.absoluteString == "https://static.tcinfra.net/media/medium/web/uxwing.com/wp-content/themes/uxwing/download/20-food-and-drinks/rice.png", url7?.absoluteString ?? "") + XCTAssert(url5?.absoluteString == "https://data.mantodev.com/media/mobile64/ipfs/bafybeiatpitaej7bynhsequ5hl45jbtjft2nkkho74jfocvnw4vrqlhdea", url5?.absoluteString ?? "") + XCTAssert(url6?.absoluteString == "https://data.mantodev.com/media/mobile64/ipfs/Qmczgp9juksRrzDkXUQQQFb9xwNDimv1gTy6kLjZqVNPoX/display/1012.png", url6?.absoluteString ?? "") + XCTAssert(url7?.absoluteString == "https://data.mantodev.com/media/mobile64/web/uxwing.com/wp-content/themes/uxwing/download/20-food-and-drinks/rice.png", url7?.absoluteString ?? "") - let url8 = MediaProxyService.thumbnailURL(forNFT: MockConstants.tokenWithNFTs.nfts![0]) - let url9 = MediaProxyService.thumbnailURL(forNFT: MockConstants.tokenWithNFTs.nfts![0], keepGif: true) + let url8 = MediaProxyService.iconURL(forNFT: MockConstants.tokenWithNFTs.nfts![0]) + let url9 = MediaProxyService.smallURL(forNFT: MockConstants.tokenWithNFTs.nfts![0]) - XCTAssert(url8?.absoluteString == "https://static.tcinfra.net/media/icon/ipfs/Qmczgp9juksRrzDkXUQQQFb9xwNDimv1gTy6kLjZqVNPoX/display/1012.png", url8?.absoluteString ?? "-") - XCTAssert(url9?.absoluteString == "https://media_mobile.tcinfra.net/media/icon-keep-gif/ipfs/Qmczgp9juksRrzDkXUQQQFb9xwNDimv1gTy6kLjZqVNPoX/display/1012.png", url9?.absoluteString ?? "-") + XCTAssert(url8?.absoluteString == "https://data.mantodev.com/media/mobile64/ipfs/Qmczgp9juksRrzDkXUQQQFb9xwNDimv1gTy6kLjZqVNPoX/display/1012.png", url8?.absoluteString ?? "-") + XCTAssert(url9?.absoluteString == "https://data.mantodev.com/media/mobile180/ipfs/bafybeiatpitaej7bynhsequ5hl45jbtjft2nkkho74jfocvnw4vrqlhdea", url9?.absoluteString ?? "-") - let url10 = MediaProxyService.displayURL(forNFT: MockConstants.tokenWithNFTs.nfts![0]) - let url11 = MediaProxyService.displayURL(forNFT: MockConstants.tokenWithNFTs.nfts![0], keepGif: true) + let url10 = MediaProxyService.mediumURL(forNFT: MockConstants.tokenWithNFTs.nfts![0]) + let url11 = MediaProxyService.largeURL(forNFT: MockConstants.tokenWithNFTs.nfts![0]) - XCTAssert(url10?.absoluteString == "https://static.tcinfra.net/media/small/ipfs/bafybeiatpitaej7bynhsequ5hl45jbtjft2nkkho74jfocvnw4vrqlhdea", url10?.absoluteString ?? "-") - XCTAssert(url11?.absoluteString == "https://media_mobile.tcinfra.net/media/small-keep-gif/ipfs/bafybeiatpitaej7bynhsequ5hl45jbtjft2nkkho74jfocvnw4vrqlhdea", url11?.absoluteString ?? "-") + XCTAssert(url10?.absoluteString == "https://data.mantodev.com/media/mobile600/ipfs/bafybeiatpitaej7bynhsequ5hl45jbtjft2nkkho74jfocvnw4vrqlhdea", url10?.absoluteString ?? "-") + XCTAssert(url11?.absoluteString == "https://data.mantodev.com/media/mobile900/ipfs/bafybeiatpitaej7bynhsequ5hl45jbtjft2nkkho74jfocvnw4vrqlhdea", url11?.absoluteString ?? "-") + + let alreadyConverted = URL(string: "https://data.mantodev.com/media/mobile64/ipfs/bafybeiatpitaej7bynhsequ5hl45jbtjft2nkkho74jfocvnw4vrqlhdea") + let testConversion = MediaProxyService.url(fromUri: alreadyConverted, ofFormat: .mobile64) + XCTAssert(testConversion?.absoluteString == "https://data.mantodev.com/media/mobile64/ipfs/bafybeiatpitaej7bynhsequ5hl45jbtjft2nkkho74jfocvnw4vrqlhdea", testConversion?.absoluteString ?? "-") } func testMediaTypeCheckerFromFormat() { @@ -104,7 +108,7 @@ class MediaProxySerivceTests: XCTestCase { expectationAudio.fulfill() } - wait(for: [expectationImage, expectationVideo, expectationAudio], timeout: 10) + wait(for: [expectationImage, expectationVideo, expectationAudio], timeout: 120) } func testMediaTypeCheckerFromUrlExtension() { @@ -122,7 +126,7 @@ class MediaProxySerivceTests: XCTestCase { expectation.fulfill() } - wait(for: [expectation], timeout: 10) + wait(for: [expectation], timeout: 120) } func testMediaTypeCheckerFromHeaders() { @@ -140,6 +144,6 @@ class MediaProxySerivceTests: XCTestCase { expectation.fulfill() } - wait(for: [expectation], timeout: 10) + wait(for: [expectation], timeout: 120) } } diff --git a/Tests/KukaiCoreSwiftTests/Services/NetworkServiceTests.swift b/Tests/KukaiCoreSwiftTests/Services/NetworkServiceTests.swift index 96942d16..dfee01cc 100644 --- a/Tests/KukaiCoreSwiftTests/Services/NetworkServiceTests.swift +++ b/Tests/KukaiCoreSwiftTests/Services/NetworkServiceTests.swift @@ -21,7 +21,7 @@ class NetworkServiceTests: XCTestCase { func testGet() { let expectation = XCTestExpectation(description: "network service GET") - MockConstants.shared.networkService.send(rpc: RPC.xtzBalance(forAddress: MockConstants.defaultHdWallet.address), withBaseURL: MockConstants.shared.config.primaryNodeURL) { result in + MockConstants.shared.networkService.send(rpc: RPC.xtzBalance(forAddress: MockConstants.defaultHdWallet.address), withNodeURLs: MockConstants.shared.config.nodeURLs) { result in switch result { case .success(let string): @@ -34,14 +34,14 @@ class NetworkServiceTests: XCTestCase { expectation.fulfill() } - wait(for: [expectation], timeout: 10) + wait(for: [expectation], timeout: 120) } func testPost() { let expectation = XCTestExpectation(description: "network service POST") if let rpc = RPC.forge(operationPayload: MockConstants.sendOperationPayload) { - MockConstants.shared.networkService.send(rpc: rpc, withBaseURL: MockConstants.shared.config.primaryNodeURL) { result in + MockConstants.shared.networkService.send(rpc: rpc, withNodeURLs: MockConstants.shared.config.nodeURLs) { result in switch result { case .success(let string): @@ -54,7 +54,7 @@ class NetworkServiceTests: XCTestCase { expectation.fulfill() } - wait(for: [expectation], timeout: 10) + wait(for: [expectation], timeout: 120) } else { XCTFail("Couldn't parse RPC") @@ -62,12 +62,13 @@ class NetworkServiceTests: XCTestCase { } func testErrorGas() { - MockURLProtocol.triggerGasExhaustedErrorOnRunOperation() + MockURLProtocol.triggerGasExhaustedErrorOnSimulateOperation(nodeUrl: 0) + MockURLProtocol.triggerGasExhaustedErrorOnSimulateOperation(nodeUrl: 1) let expectation = XCTestExpectation(description: "network service error gas") - if let rpc = RPC.runOperation(runOperationPayload: RunOperationPayload(chainID: MockConstants.blockchainHead.chainID, operation: MockConstants.sendOperationPayload)) { - MockConstants.shared.networkService.send(rpc: rpc, withBaseURL: MockConstants.shared.config.primaryNodeURL) { result in + if let rpc = RPC.simulateOperation(runOperationPayload: RunOperationPayload(chainID: MockConstants.blockchainHead.chainID, operation: MockConstants.sendOperationPayload)) { + MockConstants.shared.networkService.send(rpc: rpc, withNodeURLs: MockConstants.shared.config.nodeURLs) { result in switch result { case .success(_): @@ -75,7 +76,7 @@ class NetworkServiceTests: XCTestCase { case .failure(let error): XCTAssert(error.errorType == .rpc, error.description) - XCTAssert(error.requestURL?.absoluteString == MockConstants.shared.config.primaryNodeURL.appendingPathComponent("chains/main/blocks/head/helpers/scripts/run_operation").absoluteString) + XCTAssert(error.requestURL?.absoluteString == "https://rpc.ghostnet.tzboot.net/chains/main/blocks/head/helpers/scripts/simulate_operation?version=0", error.requestURL?.absoluteString ?? "-") XCTAssert(error.requestJSON != nil) XCTAssert(error.responseJSON != nil) } @@ -83,7 +84,7 @@ class NetworkServiceTests: XCTestCase { expectation.fulfill() } - wait(for: [expectation], timeout: 10) + wait(for: [expectation], timeout: 120) } else { XCTFail("Couldn't parse RPC") @@ -91,12 +92,12 @@ class NetworkServiceTests: XCTestCase { } func testErrorAssert() { - MockURLProtocol.triggerAssertErrorOnRunOperation() + MockURLProtocol.triggerAssertErrorOnSimulateOperation() let expectation = XCTestExpectation(description: "network service error gas") - if let rpc = RPC.runOperation(runOperationPayload: RunOperationPayload(chainID: MockConstants.blockchainHead.chainID, operation: MockConstants.sendOperationPayload)) { - MockConstants.shared.networkService.send(rpc: rpc, withBaseURL: MockConstants.shared.config.primaryNodeURL) { result in + if let rpc = RPC.simulateOperation(runOperationPayload: RunOperationPayload(chainID: MockConstants.blockchainHead.chainID, operation: MockConstants.sendOperationPayload)) { + MockConstants.shared.networkService.send(rpc: rpc, withNodeURLs: MockConstants.shared.config.nodeURLs) { result in switch result { case .success(_): @@ -105,7 +106,7 @@ class NetworkServiceTests: XCTestCase { case .failure(let error): XCTAssert(error.errorType == .unknown) XCTAssert(error.description == "Unknown: Assert_failure src/proto_009_PsFLoren/lib_protocol/operation_repr.ml:203:6", error.description) - XCTAssert(error.requestURL?.absoluteString == MockConstants.shared.config.primaryNodeURL.appendingPathComponent("chains/main/blocks/head/helpers/scripts/run_operation").absoluteString) + XCTAssert(error.requestURL?.absoluteString == "https://ghostnet.smartpy.io/chains/main/blocks/head/helpers/scripts/simulate_operation?version=0", error.requestURL?.absoluteString ?? "-") XCTAssert(error.requestJSON != nil) XCTAssert(error.responseJSON != nil) } @@ -113,7 +114,94 @@ class NetworkServiceTests: XCTestCase { expectation.fulfill() } - wait(for: [expectation], timeout: 10) + wait(for: [expectation], timeout: 120) + + } else { + XCTFail("Couldn't parse RPC") + } + } + + func testCounterInFutureErrorSingleError() { + MockURLProtocol.triggerCounterInFutureError(nodeUrl: 0) + + let expectation = XCTestExpectation(description: "checking retry logic with counter in future") + var operationPayload = OperationPayload(branch: MockConstants.blockchainHead.hash, contents: MockConstants.sendOperations) + operationPayload.addProtcol(fromMetadata: MockConstants.operationMetadata) + operationPayload.addSignature([], signingCurve: MockConstants.defaultHdWallet.privateKeyCurve()) + + if let rpc = RPC.preapply(operationPayload: operationPayload) { + MockConstants.shared.networkService.send(rpc: rpc, withNodeURLs: MockConstants.shared.config.nodeURLs) { result in + + switch result { + case .success(let opResponse): + XCTAssert(opResponse.count == 1, opResponse.count.description) + + case .failure(_): + XCTFail("Should have passed on second attempt") + } + + expectation.fulfill() + } + + wait(for: [expectation], timeout: 120) + + } else { + XCTFail("Couldn't parse RPC") + } + } + + func testCounterInFutureErrorDoubleError() { + MockURLProtocol.triggerCounterInFutureError(nodeUrl: 0) + MockURLProtocol.triggerCounterInFutureError(nodeUrl: 1) + + let expectation = XCTestExpectation(description: "checking retry logic with counter in future") + var operationPayload = OperationPayload(branch: MockConstants.blockchainHead.hash, contents: MockConstants.sendOperations) + operationPayload.addProtcol(fromMetadata: MockConstants.operationMetadata) + operationPayload.addSignature([], signingCurve: MockConstants.defaultHdWallet.privateKeyCurve()) + + if let rpc = RPC.preapply(operationPayload: operationPayload) { + MockConstants.shared.networkService.send(rpc: rpc, withNodeURLs: MockConstants.shared.config.nodeURLs) { result in + + switch result { + case .success(_): + XCTFail("Should have failed") + + case .failure(let error): + XCTAssert(error.errorType == .rpc) + XCTAssert(error.description == "RPC: contract.counter_in_the_future", error.description) + XCTAssert(error.requestURL?.absoluteString == MockConstants.shared.config.nodeURLs[1].appendingPathComponent("chains/main/blocks/head/helpers/preapply/operations").absoluteString, error.requestURL?.absoluteString ?? "-") + } + + expectation.fulfill() + } + + wait(for: [expectation], timeout: 120) + + } else { + XCTFail("Couldn't parse RPC") + } + } + + func testRpcRetryLogic() { + MockURLProtocol.triggerHttp500ErrorOnSimulateOperation() + + let expectation = XCTestExpectation(description: "network service retry logic") + + if let rpc = RPC.simulateOperation(runOperationPayload: RunOperationPayload(chainID: MockConstants.blockchainHead.chainID, operation: MockConstants.sendOperationPayload)) { + MockConstants.shared.networkService.send(rpc: rpc, withNodeURLs: MockConstants.shared.config.nodeURLs) { result in + + switch result { + case .success(let opResponse): + XCTAssert(opResponse.contents.count == 2, opResponse.contents.count.description) + + case .failure(_): + XCTFail("Should have passed on second attempt") + } + + expectation.fulfill() + } + + wait(for: [expectation], timeout: 120) } else { XCTFail("Couldn't parse RPC") diff --git a/Tests/KukaiCoreSwiftTests/Services/OperationServiceTests.swift b/Tests/KukaiCoreSwiftTests/Services/OperationServiceTests.swift index 6d928b98..26f23b12 100644 --- a/Tests/KukaiCoreSwiftTests/Services/OperationServiceTests.swift +++ b/Tests/KukaiCoreSwiftTests/Services/OperationServiceTests.swift @@ -34,7 +34,7 @@ class OperationServiceTests: XCTestCase { expectation.fulfill() } - wait(for: [expectation], timeout: 10) + wait(for: [expectation], timeout: 120) } func testLocalForgeSignPreapplyInject() { @@ -51,7 +51,7 @@ class OperationServiceTests: XCTestCase { expectation.fulfill() } - wait(for: [expectation], timeout: 10) + wait(for: [expectation], timeout: 120) } func testLedgerWithoutReveal() { diff --git a/Tests/KukaiCoreSwiftTests/Services/TaquitoServiceTests.swift b/Tests/KukaiCoreSwiftTests/Services/TaquitoServiceTests.swift index c18c2f08..c91f59e6 100644 --- a/Tests/KukaiCoreSwiftTests/Services/TaquitoServiceTests.swift +++ b/Tests/KukaiCoreSwiftTests/Services/TaquitoServiceTests.swift @@ -55,7 +55,7 @@ class TaquitoServiceTests: XCTestCase { expectation.fulfill() } - wait(for: [expectation], timeout: 10) + wait(for: [expectation], timeout: 120) } func testForge2() { @@ -78,7 +78,7 @@ class TaquitoServiceTests: XCTestCase { expectation.fulfill() } - wait(for: [expectation], timeout: 10) + wait(for: [expectation], timeout: 120) } func testForge3() { @@ -101,7 +101,7 @@ class TaquitoServiceTests: XCTestCase { expectation.fulfill() } - wait(for: [expectation], timeout: 10) + wait(for: [expectation], timeout: 120) } func testForgeError() { @@ -124,7 +124,7 @@ class TaquitoServiceTests: XCTestCase { expectation.fulfill() } - wait(for: [expectation], timeout: 10) + wait(for: [expectation], timeout: 120) } func testParse1() { @@ -141,7 +141,7 @@ class TaquitoServiceTests: XCTestCase { expectation.fulfill() } - wait(for: [expectation], timeout: 10) + wait(for: [expectation], timeout: 120) } func testParse2() { @@ -158,7 +158,7 @@ class TaquitoServiceTests: XCTestCase { expectation.fulfill() } - wait(for: [expectation], timeout: 10) + wait(for: [expectation], timeout: 120) } func testParse3() { @@ -175,6 +175,6 @@ class TaquitoServiceTests: XCTestCase { expectation.fulfill() } - wait(for: [expectation], timeout: 10) + wait(for: [expectation], timeout: 120) } } diff --git a/Tests/KukaiCoreSwiftTests/Services/TorusAuthServiceTests.swift b/Tests/KukaiCoreSwiftTests/Services/TorusAuthServiceTests.swift index b7d4f5a7..fc86e8d5 100644 --- a/Tests/KukaiCoreSwiftTests/Services/TorusAuthServiceTests.swift +++ b/Tests/KukaiCoreSwiftTests/Services/TorusAuthServiceTests.swift @@ -12,10 +12,10 @@ import CustomAuth class TorusAuthServiceTests: XCTestCase { static let googleSubVerifier = SubVerifierDetails(loginType: .web, loginProvider: .google, clientId: "mock-google-id", verifier: "mock-google-name", redirectURL: "native://mock1") - let torusService = TorusAuthService(networkService: MockConstants.shared.networkService, verifiers: [ - .twitter: SubverifierWrapper(aggregateVerifierName: "mock-twitter-verifier", networkType: .testnet, subverifier: SubVerifierDetails(loginType: .web, loginProvider: .twitter, clientId: "mock-twitter-id", verifier: "mock-twitter-name", redirectURL: "native://mock1", jwtParams: ["domain": "torus-test.auth0.com"])), - .google: SubverifierWrapper(aggregateVerifierName: "mock-google-verifier", networkType: .testnet, subverifier: TorusAuthServiceTests.googleSubVerifier) - ]) + /*let torusService = TorusAuthService(networkService: MockConstants.shared.networkService, verifiers: [ + .twitter: SubverifierWrapper(aggregateVerifierName: "mock-twitter-verifier", verifierType: .singleLogin, networkType: .testnet, subverifier: SubVerifierDetails(loginType: .web, loginProvider: .twitter, clientId: "mock-twitter-id", verifier: "mock-twitter-name", redirectURL: "native://mock1", jwtParams: ["domain": "torus-test.auth0.com"])), + .google: SubverifierWrapper(aggregateVerifierName: "mock-google-verifier", verifierType: .singleIdVerifier, networkType: .testnet, subverifier: TorusAuthServiceTests.googleSubVerifier) + ])*/ override func setUpWithError() throws { } @@ -23,6 +23,7 @@ class TorusAuthServiceTests: XCTestCase { override func tearDownWithError() throws { } + /* func testCreateGoogleWallet() { let mockTorus = MockCustomAuth(aggregateVerifierType: .singleIdVerifier, aggregateVerifier: "mock-google-verifier", @@ -50,8 +51,9 @@ class TorusAuthServiceTests: XCTestCase { expectation.fulfill() } - wait(for: [expectation], timeout: 10) + wait(for: [expectation], timeout: 120) } + */ /* // Need to mock a non-open function in TorusUtils @@ -70,7 +72,7 @@ class TorusAuthServiceTests: XCTestCase { expectation.fulfill() } - wait(for: [expectation], timeout: 10) + wait(for: [expectation], timeout: 120) } */ } diff --git a/Tests/KukaiCoreSwiftTests/Services/WalletCacheServiceTests.swift b/Tests/KukaiCoreSwiftTests/Services/WalletCacheServiceTests.swift index 10432832..7e19da89 100644 --- a/Tests/KukaiCoreSwiftTests/Services/WalletCacheServiceTests.swift +++ b/Tests/KukaiCoreSwiftTests/Services/WalletCacheServiceTests.swift @@ -31,12 +31,26 @@ class WalletCacheServiceTests: XCTestCase { // Check its empty to begin with XCTAssert(walletCacheService.readWalletsFromDiskAndDecrypt()?.count == 0) + // Check we can write wallet objects - XCTAssert(walletCacheService.cache(wallet: MockConstants.defaultLinearWallet, childOfIndex: nil, backedUp: false)) - XCTAssert(walletCacheService.cache(wallet: MockConstants.defaultHdWallet, childOfIndex: nil, backedUp: false)) + do { + try walletCacheService.cache(wallet: MockConstants.defaultLinearWallet, childOfIndex: nil, backedUp: false) + try walletCacheService.cache(wallet: MockConstants.defaultHdWallet, childOfIndex: nil, backedUp: false) + } catch { + XCTFail("Should not error: \(error)") + } + // Check it fails if we try add the same wallet a second time - XCTAssert(walletCacheService.cache(wallet: MockConstants.defaultHdWallet, childOfIndex: nil, backedUp: false) == false) + do { + try walletCacheService.cache(wallet: MockConstants.defaultHdWallet, childOfIndex: nil, backedUp: false) + + } catch let error as WalletCacheError { + XCTAssert(error == WalletCacheError.walletAlreadyExists) + } catch { + XCTFail("Should throw WalletCacheError.walletAlreadyExists") + } + // Check they have been stored XCTAssert(walletCacheService.readWalletsFromDiskAndDecrypt()?.count == 2) @@ -74,8 +88,12 @@ class WalletCacheServiceTests: XCTestCase { XCTAssert(walletCacheService.readWalletsFromDiskAndDecrypt()?.count == 0) // Check we can write wallet objects - XCTAssert(walletCacheService.cache(wallet: MockConstants.defaultLinearWallet, childOfIndex: nil, backedUp: false)) - XCTAssert(walletCacheService.cache(wallet: MockConstants.defaultHdWallet, childOfIndex: nil, backedUp: false)) + do { + try walletCacheService.cache(wallet: MockConstants.defaultLinearWallet, childOfIndex: nil, backedUp: false) + try walletCacheService.cache(wallet: MockConstants.defaultHdWallet, childOfIndex: nil, backedUp: false) + } catch { + XCTFail("Should not error: \(error)") + } // Check they have been stored XCTAssert(walletCacheService.readWalletsFromDiskAndDecrypt()?.count == 2) @@ -102,8 +120,12 @@ class WalletCacheServiceTests: XCTestCase { XCTAssert(walletCacheService.readWalletsFromDiskAndDecrypt()?.count == 0) // Check we can write wallet objects - XCTAssert(walletCacheService.cache(wallet: MockConstants.defaultLinearWallet, childOfIndex: nil, backedUp: false)) - XCTAssert(walletCacheService.cache(wallet: MockConstants.defaultHdWallet, childOfIndex: nil, backedUp: false)) + do { + try walletCacheService.cache(wallet: MockConstants.defaultLinearWallet, childOfIndex: nil, backedUp: false) + try walletCacheService.cache(wallet: MockConstants.defaultHdWallet, childOfIndex: nil, backedUp: false) + } catch { + XCTFail("Should not error: \(error)") + } // Rmeove Linear XCTAssert(walletCacheService.deleteWallet(withAddress: MockConstants.defaultLinearWallet.address, parentIndex: nil)) @@ -114,9 +136,13 @@ class WalletCacheServiceTests: XCTestCase { XCTAssert(walletCacheService.readWalletsFromDiskAndDecrypt()?.count == 0) // Add 2 children to the HDWallet - XCTAssert(walletCacheService.cache(wallet: MockConstants.defaultHdWallet, childOfIndex: nil, backedUp: false)) - XCTAssert(walletCacheService.cache(wallet: MockConstants.defaultHdWallet.createChild(accountIndex: 1) ?? MockConstants.defaultHdWallet, childOfIndex: 0, backedUp: false)) - XCTAssert(walletCacheService.cache(wallet: MockConstants.defaultHdWallet.createChild(accountIndex: 2) ?? MockConstants.defaultHdWallet, childOfIndex: 0, backedUp: false)) + do { + try walletCacheService.cache(wallet: MockConstants.defaultHdWallet, childOfIndex: nil, backedUp: false) + try walletCacheService.cache(wallet: MockConstants.defaultHdWallet.createChild(accountIndex: 1) ?? MockConstants.defaultHdWallet, childOfIndex: 0, backedUp: false) + try walletCacheService.cache(wallet: MockConstants.defaultHdWallet.createChild(accountIndex: 2) ?? MockConstants.defaultHdWallet, childOfIndex: 0, backedUp: false) + } catch { + XCTFail("Should not error: \(error)") + } // Delete the first child XCTAssert(walletCacheService.deleteWallet(withAddress: MockConstants.hdWallet.childWalletAddresses[0], parentIndex: 0)) @@ -131,7 +157,11 @@ class WalletCacheServiceTests: XCTestCase { func testDerivationPaths() { let wallet = HDWallet(withMnemonic: MockConstants.mnemonic, passphrase: MockConstants.passphrase, derivationPath: MockConstants.hdWallet_hardened_change.derivationPath)! - XCTAssert(walletCacheService.cache(wallet: wallet, childOfIndex: nil, backedUp: false)) + do { + try walletCacheService.cache(wallet: wallet, childOfIndex: nil, backedUp: false) + } catch { + XCTFail("Should not error: \(error)") + } let wallet1 = walletCacheService.fetchWallet(forAddress: wallet.address) as? HDWallet XCTAssert(wallet1 != nil) @@ -142,7 +172,11 @@ class WalletCacheServiceTests: XCTestCase { func testPassphrase() { let wallet = RegularWallet(withMnemonic: MockConstants.mnemonic, passphrase: MockConstants.passphrase)! - XCTAssert(walletCacheService.cache(wallet: wallet, childOfIndex: nil, backedUp: false)) + do { + try walletCacheService.cache(wallet: wallet, childOfIndex: nil, backedUp: false) + } catch { + XCTFail("Should not error: \(error)") + } let wallet1 = walletCacheService.fetchWallet(forAddress: wallet.address) XCTAssert(wallet1 != nil) @@ -160,16 +194,22 @@ class WalletCacheServiceTests: XCTestCase { let hdWallet4 = HDWallet(withMnemonic: mnemonic, passphrase: "abc")! - // Set 2 wallets - let _ = walletCacheService.cache(wallet: hdWallet1, childOfIndex: nil, backedUp: false) var list = walletCacheService.readMetadataFromDiskAndDecrypt() - let groupName1 = list.metadata(forAddress: hdWallet1.address)?.hdWalletGroupName - XCTAssert(groupName1 == "HD Wallet 1", groupName1 ?? "-") - let _ = walletCacheService.cache(wallet: hdWallet2, childOfIndex: nil, backedUp: false) - list = walletCacheService.readMetadataFromDiskAndDecrypt() - let groupName2 = list.metadata(forAddress: hdWallet2.address)?.hdWalletGroupName - XCTAssert(groupName2 == "HD Wallet 2", groupName2 ?? "-") + // Set 2 wallets + do { + let _ = try walletCacheService.cache(wallet: hdWallet1, childOfIndex: nil, backedUp: false) + list = walletCacheService.readMetadataFromDiskAndDecrypt() + let groupName1 = list.metadata(forAddress: hdWallet1.address)?.hdWalletGroupName + XCTAssert(groupName1 == "HD Wallet 1", groupName1 ?? "-") + + let _ = try walletCacheService.cache(wallet: hdWallet2, childOfIndex: nil, backedUp: false) + list = walletCacheService.readMetadataFromDiskAndDecrypt() + let groupName2 = list.metadata(forAddress: hdWallet2.address)?.hdWalletGroupName + XCTAssert(groupName2 == "HD Wallet 2", groupName2 ?? "-") + } catch { + XCTFail("Should not error: \(error)") + } // Update one and check @@ -182,10 +222,14 @@ class WalletCacheServiceTests: XCTestCase { // Add another to check did it reuse the name "HD Wallet 2" - let _ = walletCacheService.cache(wallet: hdWallet3, childOfIndex: nil, backedUp: false) - list = walletCacheService.readMetadataFromDiskAndDecrypt() - let groupName4 = list.metadata(forAddress: hdWallet3.address)?.hdWalletGroupName - XCTAssert(groupName4 == "HD Wallet 2", groupName4 ?? "-") + do { + let _ = try walletCacheService.cache(wallet: hdWallet3, childOfIndex: nil, backedUp: false) + list = walletCacheService.readMetadataFromDiskAndDecrypt() + let groupName4 = list.metadata(forAddress: hdWallet3.address)?.hdWalletGroupName + XCTAssert(groupName4 == "HD Wallet 2", groupName4 ?? "-") + } catch { + XCTFail("Should not error: \(error)") + } // Change all names and add 4th @@ -193,10 +237,14 @@ class WalletCacheServiceTests: XCTestCase { let _ = list.set(hdWalletGroupName: "Blah 3", forAddress: hdWallet3.address) let _ = walletCacheService.encryptAndWriteMetadataToDisk(list) - let _ = walletCacheService.cache(wallet: hdWallet4, childOfIndex: nil, backedUp: false) - list = walletCacheService.readMetadataFromDiskAndDecrypt() - let groupName5 = list.metadata(forAddress: hdWallet4.address)?.hdWalletGroupName - XCTAssert(groupName5 == "HD Wallet 4", groupName5 ?? "-") + do { + let _ = try walletCacheService.cache(wallet: hdWallet4, childOfIndex: nil, backedUp: false) + list = walletCacheService.readMetadataFromDiskAndDecrypt() + let groupName5 = list.metadata(forAddress: hdWallet4.address)?.hdWalletGroupName + XCTAssert(groupName5 == "HD Wallet 4", groupName5 ?? "-") + } catch { + XCTFail("Should not error: \(error)") + } } func testMetadata() { @@ -262,6 +310,9 @@ class WalletCacheServiceTests: XCTestCase { let metaForAddress = list.metadata(forAddress: "tz1jkl") XCTAssert(metaForAddress?.address == "tz1jkl", metaForAddress?.address ?? "-") + let parentMeta = list.parentMetadata(forChildAddress: child.address) + XCTAssert(parentMeta?.address == "tz1abc123", parentMeta?.address ?? "-") + let _ = list.set(hdWalletGroupName: "Test", forAddress: "tz1abc123") let updatedMeta = list.metadata(forAddress: "tz1abc123") XCTAssert(updatedMeta?.hdWalletGroupName == "Test", updatedMeta?.hdWalletGroupName ?? "-") @@ -284,10 +335,14 @@ class WalletCacheServiceTests: XCTestCase { XCTAssert(walletCacheService.deleteAllCacheAndKeys()) let watchWallet = WalletMetadata(address: "tz1jkl", hdWalletGroupName: nil, mainnetDomains: [], ghostnetDomains: [], type: .hd, children: [], isChild: false, isWatchOnly: true, bas58EncodedPublicKey: "", backedUp: true) - XCTAssert(walletCacheService.cacheWatchWallet(metadata: watchWallet)) - let list = walletCacheService.readMetadataFromDiskAndDecrypt() - let watch = list.watchWallets - XCTAssert(watch.count == 1, watch.count.description) + do { + try walletCacheService.cacheWatchWallet(metadata: watchWallet) + let list = walletCacheService.readMetadataFromDiskAndDecrypt() + let watch = list.watchWallets + XCTAssert(watch.count == 1, watch.count.description) + } catch { + XCTFail("Should not error: \(error)") + } } } diff --git a/Tests/KukaiCoreSwiftTests/Stubs/3route_v3_fa1-for-xtz.json b/Tests/KukaiCoreSwiftTests/Stubs/3route_v3_fa1-for-xtz.json new file mode 100644 index 00000000..95cea3c5 --- /dev/null +++ b/Tests/KukaiCoreSwiftTests/Stubs/3route_v3_fa1-for-xtz.json @@ -0,0 +1,121 @@ +[ + { + "amount": "0", + "counter": "24122766", + "destination": "KT1JVjgXPMMSaa6FkzeJcgb8q9cUaLmwaJUX", + "fee": "0", + "gas_limit": "1859", + "kind": "transaction", + "parameters": { + "entrypoint": "approve", + "value": { + "args": [ + { + "string": "KT1R7WEtNNim3YgkxPt8wPMczjH3eyhbJMtz" + }, + { + "int": "6605336839045864425" + } + ], + "prim": "Pair" + } + }, + "source": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi", + "storage_limit": "18" + }, + { + "amount": "0", + "counter": "24122767", + "destination": "KT1R7WEtNNim3YgkxPt8wPMczjH3eyhbJMtz", + "fee": "3585", + "gas_limit": "28887", + "kind": "transaction", + "parameters": { + "entrypoint": "execute", + "value": { + "args": [ + { + "int": "77" + }, + { + "args": [ + { + "int": "0" + }, + { + "args": [ + { + "int": "9299" + }, + { + "args": [ + { + "string": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi" + }, + { + "args": [ + [ + { + "args": [ + { + "int": "0" + }, + { + "args": [ + { + "args": [ + { + "int": "6605336839045864425" + } + ], + "prim": "Some" + }, + { + "args": [ + { + "int": "377" + }, + { + "args": [ + { + "int": "3" + }, + { + "bytes": "" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Elt" + } + ], + { + "int": "3" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + }, + "source": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi", + "storage_limit": "0" + } +] \ No newline at end of file diff --git a/Tests/KukaiCoreSwiftTests/Stubs/3route_v3_fa2-for-xtz.json b/Tests/KukaiCoreSwiftTests/Stubs/3route_v3_fa2-for-xtz.json new file mode 100644 index 00000000..61b7fdce --- /dev/null +++ b/Tests/KukaiCoreSwiftTests/Stubs/3route_v3_fa2-for-xtz.json @@ -0,0 +1,250 @@ +[ + { + "amount": "0", + "counter": "24122766", + "destination": "KT1914CUZ7EegAFPbfgQMRkw8Uz5mYkEz2ui", + "fee": "0", + "gas_limit": "2742", + "kind": "transaction", + "parameters": { + "entrypoint": "update_operators", + "value": [ + { + "args": [ + { + "args": [ + { + "string": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi" + }, + { + "args": [ + { + "string": "KT1R7WEtNNim3YgkxPt8wPMczjH3eyhbJMtz" + }, + { + "int": "0" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Left" + } + ] + }, + "source": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi", + "storage_limit": "0" + }, + { + "amount": "0", + "counter": "24122767", + "destination": "KT1R7WEtNNim3YgkxPt8wPMczjH3eyhbJMtz", + "fee": "0", + "gas_limit": "47925", + "kind": "transaction", + "parameters": { + "entrypoint": "execute", + "value": { + "args": [ + { + "int": "76" + }, + { + "args": [ + { + "int": "0" + }, + { + "args": [ + { + "int": "319989425" + }, + { + "args": [ + { + "string": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi" + }, + { + "args": [ + [ + { + "args": [ + { + "int": "0" + }, + { + "args": [ + { + "args": [ + { + "int": "46273683006631" + } + ], + "prim": "Some" + }, + { + "args": [ + { + "int": "370" + }, + { + "args": [ + { + "int": "1" + }, + { + "bytes": "" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Elt" + }, + { + "args": [ + { + "int": "1" + }, + { + "args": [ + { + "args": [ + { + "int": "1284059035125" + } + ], + "prim": "Some" + }, + { + "args": [ + { + "int": "912" + }, + { + "args": [ + { + "int": "3" + }, + { + "bytes": "" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Elt" + }, + { + "args": [ + { + "int": "2" + }, + { + "args": [ + { + "prim": "None" + }, + { + "args": [ + { + "int": "889" + }, + { + "args": [ + { + "int": "0" + }, + { + "bytes": "" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Elt" + } + ], + { + "int": "3" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + }, + "source": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi", + "storage_limit": "0" + }, + { + "amount": "0", + "counter": "24122768", + "destination": "KT1914CUZ7EegAFPbfgQMRkw8Uz5mYkEz2ui", + "fee": "5916", + "gas_limit": "553", + "kind": "transaction", + "parameters": { + "entrypoint": "update_operators", + "value": [ + { + "args": [ + { + "args": [ + { + "string": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi" + }, + { + "args": [ + { + "string": "KT1R7WEtNNim3YgkxPt8wPMczjH3eyhbJMtz" + }, + { + "int": "0" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Right" + } + ] + }, + "source": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi", + "storage_limit": "0" + } +] \ No newline at end of file diff --git a/Tests/KukaiCoreSwiftTests/Stubs/3route_v4_fa1-for-fa2.json b/Tests/KukaiCoreSwiftTests/Stubs/3route_v4_fa1-for-fa2.json new file mode 100644 index 00000000..a35ec929 --- /dev/null +++ b/Tests/KukaiCoreSwiftTests/Stubs/3route_v4_fa1-for-fa2.json @@ -0,0 +1,363 @@ +[ + { + "amount": "0", + "counter": "24122684", + "destination": "KT1Ha4yFVeyzw6KRAdkzq6TxDHB97KG4pZe8", + "fee": "0", + "gas_limit": "650000", + "kind": "transaction", + "parameters": { + "entrypoint": "approve", + "value": { + "args": [ + { + "string": "KT1V5XKmeypanMS9pR65REpqmVejWBZURuuT" + }, + { + "int": "0" + } + ], + "prim": "Pair" + } + }, + "source": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi", + "storage_limit": "60000" + }, + { + "amount": "0", + "counter": "24122685", + "destination": "KT1Ha4yFVeyzw6KRAdkzq6TxDHB97KG4pZe8", + "fee": "0", + "gas_limit": "650000", + "kind": "transaction", + "parameters": { + "entrypoint": "approve", + "value": { + "args": [ + { + "string": "KT1V5XKmeypanMS9pR65REpqmVejWBZURuuT" + }, + { + "int": "400000" + } + ], + "prim": "Pair" + } + }, + "source": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi", + "storage_limit": "60000" + }, + { + "amount": "0", + "counter": "24122686", + "destination": "KT1V5XKmeypanMS9pR65REpqmVejWBZURuuT", + "fee": "0", + "gas_limit": "650000", + "kind": "transaction", + "parameters": { + "entrypoint": "execute", + "value": { + "args": [ + { + "int": "9" + }, + { + "args": [ + { + "int": "16" + }, + { + "args": [ + { + "int": "1228276" + }, + { + "args": [ + { + "string": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi" + }, + { + "args": [ + [ + { + "args": [ + { + "int": "0" + }, + { + "args": [ + { + "int": "246" + }, + { + "args": [ + { + "int": "0" + }, + { + "args": [ + { + "int": "196000" + }, + { + "args": [ + { + "int": "0" + }, + { + "bytes": "" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Elt" + }, + { + "args": [ + { + "int": "1" + }, + { + "args": [ + { + "int": "250" + }, + { + "args": [ + { + "int": "7" + }, + { + "args": [ + { + "int": "0" + }, + { + "args": [ + { + "int": "0" + }, + { + "bytes": "" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Elt" + }, + { + "args": [ + { + "int": "2" + }, + { + "args": [ + { + "int": "65" + }, + { + "args": [ + { + "int": "3" + }, + { + "args": [ + { + "int": "64000" + }, + { + "args": [ + { + "int": "0" + }, + { + "bytes": "" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Elt" + }, + { + "args": [ + { + "int": "3" + }, + { + "args": [ + { + "int": "18" + }, + { + "args": [ + { + "int": "7" + }, + { + "args": [ + { + "int": "0" + }, + { + "args": [ + { + "int": "0" + }, + { + "bytes": "" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Elt" + }, + { + "args": [ + { + "int": "4" + }, + { + "args": [ + { + "int": "308" + }, + { + "args": [ + { + "int": "2" + }, + { + "args": [ + { + "int": "140000" + }, + { + "args": [ + { + "int": "0" + }, + { + "bytes": "" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Elt" + }, + { + "args": [ + { + "int": "5" + }, + { + "args": [ + { + "int": "282" + }, + { + "args": [ + { + "int": "7" + }, + { + "args": [ + { + "int": "0" + }, + { + "args": [ + { + "int": "0" + }, + { + "bytes": "" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Elt" + } + ], + { + "int": "0" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + }, + "source": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi", + "storage_limit": "60000" + } +] \ No newline at end of file diff --git a/Tests/KukaiCoreSwiftTests/Stubs/3route_v4_multiple-routes.json b/Tests/KukaiCoreSwiftTests/Stubs/3route_v4_multiple-routes.json new file mode 100644 index 00000000..a006eb00 --- /dev/null +++ b/Tests/KukaiCoreSwiftTests/Stubs/3route_v4_multiple-routes.json @@ -0,0 +1,307 @@ +[ + { + "gas_limit": "650000", + "amount": "0", + "destination": "KT1914CUZ7EegAFPbfgQMRkw8Uz5mYkEz2ui", + "parameters": { + "entrypoint": "update_operators", + "value": [ + { + "prim": "Left", + "args": [ + { + "prim": "Pair", + "args": [ + { + "string": "tz1bJyyFMMWhwkdKSi7Ud8fimu72yfjNC44j" + }, + { + "prim": "Pair", + "args": [ + { + "string": "KT1V5XKmeypanMS9pR65REpqmVejWBZURuuT" + }, + { + "int": "0" + } + ] + } + ] + } + ] + } + ] + }, + "counter": "95756290", + "source": "tz1bJyyFMMWhwkdKSi7Ud8fimu72yfjNC44j", + "storage_limit": "60000", + "kind": "transaction", + "fee": "0" + }, + { + "source": "tz1bJyyFMMWhwkdKSi7Ud8fimu72yfjNC44j", + "storage_limit": "60000", + "gas_limit": "650000", + "destination": "KT1V5XKmeypanMS9pR65REpqmVejWBZURuuT", + "counter": "95756291", + "amount": "0", + "fee": "0", + "parameters": { + "entrypoint": "execute", + "value": { + "prim": "Pair", + "args": [ + { + "int": "76" + }, + { + "args": [ + { + "int": "0" + }, + { + "prim": "Pair", + "args": [ + { + "int": "697483" + }, + { + "prim": "Pair", + "args": [ + { + "string": "tz1bJyyFMMWhwkdKSi7Ud8fimu72yfjNC44j" + }, + { + "args": [ + [ + { + "prim": "Elt", + "args": [ + { + "int": "0" + }, + { + "prim": "Pair", + "args": [ + { + "int": "371" + }, + { + "args": [ + { + "int": "1" + }, + { + "args": [ + { + "int": "62357924011" + }, + { + "args": [ + { + "int": "0" + }, + { + "bytes": "" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ] + } + ] + }, + { + "args": [ + { + "int": "1" + }, + { + "args": [ + { + "int": "856" + }, + { + "prim": "Pair", + "args": [ + { + "int": "6" + }, + { + "args": [ + { + "int": "0" + }, + { + "prim": "Pair", + "args": [ + { + "int": "0" + }, + { + "bytes": "" + } + ] + } + ], + "prim": "Pair" + } + ] + } + ], + "prim": "Pair" + } + ], + "prim": "Elt" + }, + { + "args": [ + { + "int": "2" + }, + { + "args": [ + { + "int": "795" + }, + { + "prim": "Pair", + "args": [ + { + "int": "3" + }, + { + "args": [ + { + "int": "3281996000" + }, + { + "prim": "Pair", + "args": [ + { + "int": "0" + }, + { + "bytes": "" + } + ] + } + ], + "prim": "Pair" + } + ] + } + ], + "prim": "Pair" + } + ], + "prim": "Elt" + }, + { + "args": [ + { + "int": "3" + }, + { + "args": [ + { + "int": "534" + }, + { + "prim": "Pair", + "args": [ + { + "int": "6" + }, + { + "prim": "Pair", + "args": [ + { + "int": "0" + }, + { + "prim": "Pair", + "args": [ + { + "int": "0" + }, + { + "bytes": "" + } + ] + } + ] + } + ] + } + ], + "prim": "Pair" + } + ], + "prim": "Elt" + } + ], + { + "int": "0" + } + ], + "prim": "Pair" + } + ] + } + ] + } + ], + "prim": "Pair" + } + ] + } + }, + "kind": "transaction" + }, + { + "counter": "95756292", + "destination": "KT1914CUZ7EegAFPbfgQMRkw8Uz5mYkEz2ui", + "storage_limit": "60000", + "fee": "0", + "source": "tz1bJyyFMMWhwkdKSi7Ud8fimu72yfjNC44j", + "parameters": { + "value": [ + { + "prim": "Right", + "args": [ + { + "args": [ + { + "string": "tz1bJyyFMMWhwkdKSi7Ud8fimu72yfjNC44j" + }, + { + "args": [ + { + "string": "KT1V5XKmeypanMS9pR65REpqmVejWBZURuuT" + }, + { + "int": "0" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ] + } + ], + "entrypoint": "update_operators" + }, + "gas_limit": "650000", + "amount": "0", + "kind": "transaction" + } +] \ No newline at end of file diff --git a/Tests/KukaiCoreSwiftTests/Stubs/3route_v4_single-route.json b/Tests/KukaiCoreSwiftTests/Stubs/3route_v4_single-route.json new file mode 100644 index 00000000..ee47f3f9 --- /dev/null +++ b/Tests/KukaiCoreSwiftTests/Stubs/3route_v4_single-route.json @@ -0,0 +1,178 @@ +[ + { + "kind": "transaction", + "gas_limit": "650000", + "amount": "0", + "source": "tz1bJyyFMMWhwkdKSi7Ud8fimu72yfjNC44j", + "storage_limit": "60000", + "fee": "0", + "parameters": { + "value": [ + { + "prim": "Left", + "args": [ + { + "args": [ + { + "string": "tz1bJyyFMMWhwkdKSi7Ud8fimu72yfjNC44j" + }, + { + "prim": "Pair", + "args": [ + { + "string": "KT1V5XKmeypanMS9pR65REpqmVejWBZURuuT" + }, + { + "int": "3" + } + ] + } + ], + "prim": "Pair" + } + ] + } + ], + "entrypoint": "update_operators" + }, + "counter": "95756292", + "destination": "KT1ErKVqEhG9jxXgUG2KGLW3bNM7zXHX8SDF" + }, + { + "kind": "transaction", + "gas_limit": "650000", + "source": "tz1bJyyFMMWhwkdKSi7Ud8fimu72yfjNC44j", + "fee": "0", + "amount": "0", + "parameters": { + "entrypoint": "execute", + "value": { + "prim": "Pair", + "args": [ + { + "int": "62" + }, + { + "args": [ + { + "int": "0" + }, + { + "args": [ + { + "int": "499" + }, + { + "prim": "Pair", + "args": [ + { + "string": "tz1bJyyFMMWhwkdKSi7Ud8fimu72yfjNC44j" + }, + { + "prim": "Pair", + "args": [ + [ + { + "prim": "Elt", + "args": [ + { + "int": "0" + }, + { + "prim": "Pair", + "args": [ + { + "int": "132" + }, + { + "prim": "Pair", + "args": [ + { + "int": "0" + }, + { + "prim": "Pair", + "args": [ + { + "int": "100000000000" + }, + { + "args": [ + { + "int": "0" + }, + { + "bytes": "" + } + ], + "prim": "Pair" + } + ] + } + ] + } + ] + } + ] + } + ], + { + "int": "0" + } + ] + } + ] + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ] + } + }, + "destination": "KT1V5XKmeypanMS9pR65REpqmVejWBZURuuT", + "counter": "95756293", + "storage_limit": "60000" + }, + { + "destination": "KT1ErKVqEhG9jxXgUG2KGLW3bNM7zXHX8SDF", + "source": "tz1bJyyFMMWhwkdKSi7Ud8fimu72yfjNC44j", + "storage_limit": "60000", + "fee": "0", + "amount": "0", + "parameters": { + "value": [ + { + "args": [ + { + "prim": "Pair", + "args": [ + { + "string": "tz1bJyyFMMWhwkdKSi7Ud8fimu72yfjNC44j" + }, + { + "args": [ + { + "string": "KT1V5XKmeypanMS9pR65REpqmVejWBZURuuT" + }, + { + "int": "3" + } + ], + "prim": "Pair" + } + ] + } + ], + "prim": "Right" + } + ], + "entrypoint": "update_operators" + }, + "gas_limit": "650000", + "counter": "95756294", + "kind": "transaction" + } +] \ No newline at end of file diff --git a/Tests/KukaiCoreSwiftTests/Stubs/crunchy-stake.json b/Tests/KukaiCoreSwiftTests/Stubs/crunchy-stake.json new file mode 100644 index 00000000..fdfb2779 --- /dev/null +++ b/Tests/KukaiCoreSwiftTests/Stubs/crunchy-stake.json @@ -0,0 +1,104 @@ +[ + { + "counter": "24122610", + "kind": "transaction", + "gas_limit": "650000", + "destination": "KT1UQVEDf4twF2eMbrCKQAxN7YYunTAiCTTm", + "source": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi", + "amount": "0", + "parameters": { + "value": [ + { + "args": [ + { + "prim": "Pair", + "args": [ + { + "string": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi" + }, + { + "args": [ + { + "string": "KT1L1WZgdsfjEyP5T4ZCYVvN5vgzrNbu18kX" + }, + { + "int": "0" + } + ], + "prim": "Pair" + } + ] + } + ], + "prim": "Left" + } + ], + "entrypoint": "update_operators" + }, + "storage_limit": "60000", + "fee": "0" + }, + { + "counter": "24122611", + "storage_limit": "60000", + "kind": "transaction", + "destination": "KT1L1WZgdsfjEyP5T4ZCYVvN5vgzrNbu18kX", + "fee": "0", + "source": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi", + "gas_limit": "650000", + "amount": "0", + "parameters": { + "value": { + "args": [ + { + "int": "1004" + }, + { + "int": "1146068835831283" + } + ], + "prim": "Pair" + }, + "entrypoint": "deposit" + } + }, + { + "amount": "0", + "counter": "24122612", + "fee": "0", + "kind": "transaction", + "destination": "KT1UQVEDf4twF2eMbrCKQAxN7YYunTAiCTTm", + "source": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi", + "storage_limit": "60000", + "gas_limit": "650000", + "parameters": { + "value": [ + { + "args": [ + { + "prim": "Pair", + "args": [ + { + "string": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi" + }, + { + "prim": "Pair", + "args": [ + { + "string": "KT1L1WZgdsfjEyP5T4ZCYVvN5vgzrNbu18kX" + }, + { + "int": "0" + } + ] + } + ] + } + ], + "prim": "Right" + } + ], + "entrypoint": "update_operators" + } + } +] \ No newline at end of file diff --git a/Tests/KukaiCoreSwiftTests/Stubs/dipdup_dex_exchange_request_1.json b/Tests/KukaiCoreSwiftTests/Stubs/dipdup_dex_exchange_request_1.json index 5bd141e7..9c2ffa0f 100644 --- a/Tests/KukaiCoreSwiftTests/Stubs/dipdup_dex_exchange_request_1.json +++ b/Tests/KukaiCoreSwiftTests/Stubs/dipdup_dex_exchange_request_1.json @@ -1 +1 @@ -{"query":"query {token(limit: 100, offset: 0, where: {exchanges: {name: {_in: [\"lb\", \"quipuswap\"]}}}) {symbol,address,tokenId,exchanges(where: {name: {_in: [\"lb\", \"quipuswap\"]}}) {name,tezPool,tokenPool,address,sharesTotal,midPrice,token {address,decimals,symbol,tokenId,standard}}}}"} \ No newline at end of file +{"query":"query {token(limit: 100, offset: 0, where: {exchanges: {name: {_in: [\"lb\", \"quipuswap\"]}}}) {symbol,address,tokenId,decimals,thumbnailUri,exchanges(where: {name: {_in: [\"lb\", \"quipuswap\"]}}) {name,tezPool,tokenPool,address,sharesTotal,midPrice,token {address,decimals,symbol,tokenId,standard,thumbnailUri}}}}"} \ No newline at end of file diff --git a/Tests/KukaiCoreSwiftTests/Stubs/dipdup_dex_exchange_request_2.json b/Tests/KukaiCoreSwiftTests/Stubs/dipdup_dex_exchange_request_2.json index f5084079..13af5a29 100644 --- a/Tests/KukaiCoreSwiftTests/Stubs/dipdup_dex_exchange_request_2.json +++ b/Tests/KukaiCoreSwiftTests/Stubs/dipdup_dex_exchange_request_2.json @@ -1 +1 @@ -{"query":"query {token(limit: 100, offset: 100, where: {exchanges: {name: {_in: [\"lb\", \"quipuswap\"]}}}) {symbol,address,tokenId,exchanges(where: {name: {_in: [\"lb\", \"quipuswap\"]}}) {name,tezPool,tokenPool,address,sharesTotal,midPrice,token {address,decimals,symbol,tokenId,standard}}}}"} \ No newline at end of file +{"query":"query {token(limit: 100, offset: 100, where: {exchanges: {name: {_in: [\"lb\", \"quipuswap\"]}}}) {symbol,address,tokenId,decimals,thumbnailUri,exchanges(where: {name: {_in: [\"lb\", \"quipuswap\"]}}) {name,tezPool,tokenPool,address,sharesTotal,midPrice,token {address,decimals,symbol,tokenId,standard,thumbnailUri}}}}"} \ No newline at end of file diff --git a/Tests/KukaiCoreSwiftTests/Stubs/dipdup_dex_exchange_request_3.json b/Tests/KukaiCoreSwiftTests/Stubs/dipdup_dex_exchange_request_3.json index 5a4af757..d68cf03d 100644 --- a/Tests/KukaiCoreSwiftTests/Stubs/dipdup_dex_exchange_request_3.json +++ b/Tests/KukaiCoreSwiftTests/Stubs/dipdup_dex_exchange_request_3.json @@ -1 +1 @@ -{"query":"query {token(limit: 100, offset: 200, where: {exchanges: {name: {_in: [\"lb\", \"quipuswap\"]}}}) {symbol,address,tokenId,exchanges(where: {name: {_in: [\"lb\", \"quipuswap\"]}}) {name,tezPool,tokenPool,address,sharesTotal,midPrice,token {address,decimals,symbol,tokenId,standard}}}}"} \ No newline at end of file +{"query":"query {token(limit: 100, offset: 200, where: {exchanges: {name: {_in: [\"lb\", \"quipuswap\"]}}}) {symbol,address,tokenId,decimals,thumbnailUri,exchanges(where: {name: {_in: [\"lb\", \"quipuswap\"]}}) {name,tezPool,tokenPool,address,sharesTotal,midPrice,token {address,decimals,symbol,tokenId,standard,thumbnailUri}}}}"} \ No newline at end of file diff --git a/Tests/KukaiCoreSwiftTests/Stubs/dipdup_dex_exchange_request_4.json b/Tests/KukaiCoreSwiftTests/Stubs/dipdup_dex_exchange_request_4.json index d955cd26..5ccbdec6 100644 --- a/Tests/KukaiCoreSwiftTests/Stubs/dipdup_dex_exchange_request_4.json +++ b/Tests/KukaiCoreSwiftTests/Stubs/dipdup_dex_exchange_request_4.json @@ -1 +1 @@ -{"query":"query {token(limit: 100, offset: 300, where: {exchanges: {name: {_in: [\"lb\", \"quipuswap\"]}}}) {symbol,address,tokenId,exchanges(where: {name: {_in: [\"lb\", \"quipuswap\"]}}) {name,tezPool,tokenPool,address,sharesTotal,midPrice,token {address,decimals,symbol,tokenId,standard}}}}"} \ No newline at end of file +{"query":"query {token(limit: 100, offset: 300, where: {exchanges: {name: {_in: [\"lb\", \"quipuswap\"]}}}) {symbol,address,tokenId,decimals,thumbnailUri,exchanges(where: {name: {_in: [\"lb\", \"quipuswap\"]}}) {name,tezPool,tokenPool,address,sharesTotal,midPrice,token {address,decimals,symbol,tokenId,standard,thumbnailUri}}}}"} \ No newline at end of file diff --git a/Tests/KukaiCoreSwiftTests/Stubs/dipdup_dex_exchange_response_1.json b/Tests/KukaiCoreSwiftTests/Stubs/dipdup_dex_exchange_response_1.json index b1a40af7..f9847f2b 100644 --- a/Tests/KukaiCoreSwiftTests/Stubs/dipdup_dex_exchange_response_1.json +++ b/Tests/KukaiCoreSwiftTests/Stubs/dipdup_dex_exchange_response_1.json @@ -1,2221 +1,2602 @@ { "data": { - "token": [ - { - "symbol": "GIF", - "address": "KT1XTxpQvo7oRCqp85LikEZgAZ22uDxhbWJv", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "46303.722435", - "tokenPool": "3251161.663796847000000000000000000000000000", - "address": "KT1LuXT6jZPhUH1qCnSUqAzFedjoBwePLQnF", - "sharesTotal": "45813835603", - "midPrice": "0.014242", - "token": { - "address": "KT1XTxpQvo7oRCqp85LikEZgAZ22uDxhbWJv", - "decimals": 9, - "symbol": "GIF", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "ctez", - "address": "KT1SjXiUX63QvdNMcM2m492f7kuf8JxXRLp4", + "token": [ + { + "symbol": "wXTZ", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 6, + "address": "KT1VYsVfmobT7rsMVivvZ4J8i3bPiqz12NaH", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "6810.641207", + "tokenPool": "7884.572150000000000000000000000000000000", + "address": "KT1W3VGRUjvS869r4ror8kdaxqJAZUbPyjMT", + "sharesTotal": "6550139758", + "midPrice": "0.863793", + "token": { + "address": "KT1VYsVfmobT7rsMVivvZ4J8i3bPiqz12NaH", + "decimals": 6, + "symbol": "wXTZ", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "138951.848878", - "tokenPool": "131994.073569000000000000000000000000000000", - "address": "KT1FbYwEWU8BTfrvNoL5xDEC5owsDxv9nqKT", - "sharesTotal": "127404376417", - "midPrice": "1.052713", - "token": { - "address": "KT1SjXiUX63QvdNMcM2m492f7kuf8JxXRLp4", - "decimals": 6, - "symbol": "ctez", - "tokenId": 0, - "standard": "fa12" - } - } - ] - }, - { - "symbol": "tzBTC", + "standard": "fa12", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "kUSD", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 18, + "address": "KT1K9gCRgaLRFKTErYt1wVxA3Frb9FjasjTV", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "153979.389619", + "tokenPool": "148249.554210973152474283000000000000000000", + "address": "KT1K4EwTpbvYN9agJdjpyJm4ZZdhpUNKB3F6", + "sharesTotal": "42168132532", + "midPrice": "1.038650", + "token": { + "address": "KT1K9gCRgaLRFKTErYt1wVxA3Frb9FjasjTV", + "decimals": 18, + "symbol": "kUSD", + "tokenId": 0, + "standard": "fa12", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "tzBTC", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 8, + "address": "KT1PWx2mnDueood7fEmfbBDKx1D9BAnnXitn", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "9469.130217", + "tokenPool": "0.222477650000000000000000000000000000", + "address": "KT1WBLrLE2vG8SedBqiSJFm4VVAZZBytJYHc", + "sharesTotal": "3573048455", + "midPrice": "42562.163961", + "token": { "address": "KT1PWx2mnDueood7fEmfbBDKx1D9BAnnXitn", + "decimals": 8, + "symbol": "tzBTC", "tokenId": 0, - "exchanges": [ - { - "name": "lb", - "tezPool": "2812610.757224", - "tokenPool": "257.440135520000000000000000000000000000", - "address": "KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5", - "sharesTotal": "225981758", - "midPrice": "10925.300173", - "token": { - "address": "KT1PWx2mnDueood7fEmfbBDKx1D9BAnnXitn", - "decimals": 8, - "symbol": "tzBTC", - "tokenId": 0, - "standard": "fa12" - } - }, - { - "name": "quipuswap", - "tezPool": "6872.313168", - "tokenPool": "0.625203360000000000000000000000000000", - "address": "KT1WBLrLE2vG8SedBqiSJFm4VVAZZBytJYHc", - "sharesTotal": "5324528635", - "midPrice": "10992.124495", - "token": { - "address": "KT1PWx2mnDueood7fEmfbBDKx1D9BAnnXitn", - "decimals": 8, - "symbol": "tzBTC", - "tokenId": 0, - "standard": "fa12" - } - } - ] + "standard": "fa12", + "thumbnailUri": null + } }, { - "symbol": "CRUNCH", - "address": "KT1BHCumksALJQJ8q8to2EPigPW6qpyTr7Ng", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "103461.398158", - "tokenPool": "27710864.042489220000000000000000000000000000", - "address": "KT1RRgK6eXvCWCiEGWhRZCSVGzhDzwXEEjS4", - "sharesTotal": "167862607168", - "midPrice": "0.003734", - "token": { - "address": "KT1BHCumksALJQJ8q8to2EPigPW6qpyTr7Ng", - "decimals": 8, - "symbol": "CRUNCH", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "kUSD", - "address": "KT1K9gCRgaLRFKTErYt1wVxA3Frb9FjasjTV", + "name": "lb", + "tezPool": "9786368.580355", + "tokenPool": "229.555412300000000000000000000000000000", + "address": "KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5", + "sharesTotal": "273458197", + "midPrice": "42631.835522", + "token": { + "address": "KT1PWx2mnDueood7fEmfbBDKx1D9BAnnXitn", + "decimals": 8, + "symbol": "tzBTC", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "55026.772167", - "tokenPool": "214228.802319553733742123000000000000000000", - "address": "KT1K4EwTpbvYN9agJdjpyJm4ZZdhpUNKB3F6", - "sharesTotal": "35035881156", - "midPrice": "0.256860", - "token": { - "address": "KT1K9gCRgaLRFKTErYt1wVxA3Frb9FjasjTV", - "decimals": 18, - "symbol": "kUSD", - "tokenId": 0, - "standard": "fa12" - } - } - ] - }, - { - "symbol": "PLENTY", - "address": "KT1GRSvLoikDsXujKgZPsGLX8k8VvR2Tq95b", + "standard": "fa12", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "HERO", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 8, + "address": "KT1UYd3dEhE4kXPjr39GwhgDgaWawTV7HpDR", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.548517", + "tokenPool": "0.185000000000000000000000000000000000", + "address": "KT1HuvTLksDHUZYs12MZUbhHHR1SUdMA1NuS", + "sharesTotal": "10000000", + "midPrice": "2.964957", + "token": { + "address": "KT1UYd3dEhE4kXPjr39GwhgDgaWawTV7HpDR", + "decimals": 8, + "symbol": "HERO", + "tokenId": 0, + "standard": "fa12", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "T42", + "thumbnailUri": "https://i.postimg.cc/MpKJW5pX/Icon.png", + "tokenId": 0, + "decimals": 0, + "address": "KT1EpihM8tQSBwqYB6NtCT8N67pq8rKwoD93", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1M5H8qkJEzhdC3ZxZ78bSxgmcddrcusbry", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1EpihM8tQSBwqYB6NtCT8N67pq8rKwoD93", + "decimals": 0, + "symbol": "T42", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.postimg.cc/MpKJW5pX/Icon.png" + } + } + ] + }, + { + "symbol": "STKR", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 18, + "address": "KT1AEfeckNbdEYwaMKkytBwPJPycz7jdSGea", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "983.583320", + "tokenPool": "5225676.246385198749577955000000000000000000", + "address": "KT1BMEEPX7MWzwwadW3NCSZe9XGmFJ7rs7Dr", + "sharesTotal": "11826700737", + "midPrice": "0.000188", + "token": { + "address": "KT1AEfeckNbdEYwaMKkytBwPJPycz7jdSGea", + "decimals": 18, + "symbol": "STKR", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "42473.142018", - "tokenPool": "1122672.391555723219658027000000000000000000", - "address": "KT1X1LgNkQShpF9nRLYw3Dgdy4qp38MX617z", - "sharesTotal": "30398589036", - "midPrice": "0.037832", - "token": { - "address": "KT1GRSvLoikDsXujKgZPsGLX8k8VvR2Tq95b", - "decimals": 18, - "symbol": "PLENTY", - "tokenId": 0, - "standard": "fa12" - } - } - ] - }, - { - "symbol": "QUIPU", - "address": "KT193D4vozYnhGJQVtw7CoxxqphqUEEwK6Vb", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "41400.076926", - "tokenPool": "72587.914484000000000000000000000000000000", - "address": "KT1X3zxdTzPB9DgVzA3ad6dgZe9JEamoaeRy", - "sharesTotal": "45777340646", - "midPrice": "0.570344", - "token": { - "address": "KT193D4vozYnhGJQVtw7CoxxqphqUEEwK6Vb", - "decimals": 6, - "symbol": "QUIPU", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "USDtz", + "standard": "fa12", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "CaTz", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 0, + "address": "KT1Ph8ptSU4rf7PPg2YBMR6LTpr6rc4MMyrq", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "3.583556", + "tokenPool": "17362603407.000000000000000000000000000000000000", + "address": "KT1XmsFAdPhsDnhGzQLqQQiGkCGoyekGFC8B", + "sharesTotal": "2370350779", + "midPrice": "0.000000", + "token": { + "address": "KT1Ph8ptSU4rf7PPg2YBMR6LTpr6rc4MMyrq", + "decimals": 0, + "symbol": "CaTz", + "tokenId": 0, + "standard": "fa12", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "TZS", + "thumbnailUri": "https://ibb.co/zQLbthQ", + "tokenId": 0, + "decimals": 0, + "address": "KT1XRxmUFNcbzGTwQPvNPa5FuuM43uEunp8K", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "7.446925", + "tokenPool": "49310.000000000000000000000000000000000000", + "address": "KT1A834QfnWremTQ4tc63s8NKbHzLJVszgxc", + "sharesTotal": "20509288", + "midPrice": "0.000151", + "token": { + "address": "KT1XRxmUFNcbzGTwQPvNPa5FuuM43uEunp8K", + "decimals": 0, + "symbol": "TZS", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://ibb.co/zQLbthQ" + } + } + ] + }, + { + "symbol": "tCow", + "thumbnailUri": "https://cloudflare-ipfs.com/ipfs/QmcRQKxJvnrzmKMH7y7ftkSraKB1rfXqeX4Etz6ve5r278", + "tokenId": 0, + "decimals": 2, + "address": "KT1LVnyY5cSCVpFMGXzqVsWNiSkJYA8w1rZk", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "30.281195", + "tokenPool": "4045524.020000000000000000000000000000000000", + "address": "KT1XQZxsG4pMgcN7q7Nu3XFihsb9mEvqBmAT", + "sharesTotal": "330702051", + "midPrice": "0.000007", + "token": { + "address": "KT1LVnyY5cSCVpFMGXzqVsWNiSkJYA8w1rZk", + "decimals": 2, + "symbol": "tCow", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://cloudflare-ipfs.com/ipfs/QmcRQKxJvnrzmKMH7y7ftkSraKB1rfXqeX4Etz6ve5r278" + } + } + ] + }, + { + "symbol": "TCZ", + "thumbnailUri": "https://tacoz.cash/images/logo_small.png", + "tokenId": 0, + "decimals": 18, + "address": "KT1GGxCNiJ7yaBAH4hAw5AHXbP3PSmAiy3wK", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "71.539272", + "tokenPool": "955604465.367226060869455627000000000000000000", + "address": "KT1VfiExduEkrpM4TbsnAw9QV1VURqaRFGKs", + "sharesTotal": "1156083074", + "midPrice": "0.000000", + "token": { + "address": "KT1GGxCNiJ7yaBAH4hAw5AHXbP3PSmAiy3wK", + "decimals": 18, + "symbol": "TCZ", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://tacoz.cash/images/logo_small.png" + } + } + ] + }, + { + "symbol": "PKA", + "thumbnailUri": "ipfs://QmVAgWXYepnwEefk8jn4mFZkwvZZ7pTPCPELKgkRkZgk9i", + "tokenId": 0, + "decimals": 3, + "address": "KT1V5yCUQ73nUjrbk82ALcrGNdRFNk3k2tvX", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "4.884790", + "tokenPool": "20817.718000000000000000000000000000000000", + "address": "KT1BAPAVXMuYz63HrF9CGM9Gu8JVYTFpYqao", + "sharesTotal": "9210662", + "midPrice": "0.000235", + "token": { + "address": "KT1V5yCUQ73nUjrbk82ALcrGNdRFNk3k2tvX", + "decimals": 3, + "symbol": "PKA", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "ipfs://QmVAgWXYepnwEefk8jn4mFZkwvZZ7pTPCPELKgkRkZgk9i" + } + } + ] + }, + { + "symbol": "OBJKT", + "thumbnailUri": "ipfs://QmNrhZHUaEqxhyLfqoq1mtHSipkWHeT31LNHb1QEbDHgnc", + "tokenId": 79, + "decimals": 0, + "address": "KT1M2JnD1wsg7w2B4UXJXtKQPuDUpU2L7cJH", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "64.949543", + "tokenPool": "7462888.000000000000000000000000000000000000", + "address": "KT1A4Sj8TBg4pazMkj226bAAcH6A4iCNQno4", + "sharesTotal": "382735187", + "midPrice": "0.000009", + "token": { + "address": "KT1M2JnD1wsg7w2B4UXJXtKQPuDUpU2L7cJH", + "decimals": 0, + "symbol": "OBJKT", + "tokenId": 79, + "standard": "fa2", + "thumbnailUri": "ipfs://QmNrhZHUaEqxhyLfqoq1mtHSipkWHeT31LNHb1QEbDHgnc" + } + } + ] + }, + { + "symbol": "hDAO", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 6, + "address": "KT1AFA2mwNUMNd4SsujE1YYp29vd8BZejyKW", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "1092.915775", + "tokenPool": "31855.553637000000000000000000000000000000", + "address": "KT1QxLqukyfohPV5kPkw97Rs6cw1DDDvYgbB", + "sharesTotal": "7077533669", + "midPrice": "0.034308", + "token": { + "address": "KT1AFA2mwNUMNd4SsujE1YYp29vd8BZejyKW", + "decimals": 6, + "symbol": "hDAO", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "sDAO", + "thumbnailUri": "ipfs://QmPJ7dMS3T6McqPjjBioKhHqtEUEBhAXpcRf3aicaLNPtV", + "tokenId": 1, + "decimals": 0, + "address": "KT19ovJhcsUn4YU8Q5L3BGovKSixfbWcecEA", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "1744.109351", + "tokenPool": "470419.000000000000000000000000000000000000", + "address": "KT1PrRTVNgxkRgyqqNQvwTiVhd55dqyxXJ6n", + "sharesTotal": "1948740875", + "midPrice": "0.003708", + "token": { + "address": "KT19ovJhcsUn4YU8Q5L3BGovKSixfbWcecEA", + "decimals": 0, + "symbol": "sDAO", + "tokenId": 1, + "standard": "fa2", + "thumbnailUri": "ipfs://QmPJ7dMS3T6McqPjjBioKhHqtEUEBhAXpcRf3aicaLNPtV" + } + } + ] + }, + { + "symbol": "USDS", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 6, + "address": "KT1REEb5VxWRjcHm5GzDMwErMmNFftsE5Gpf", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "862.938417", + "tokenPool": "1501.611829000000000000000000000000000000", + "address": "KT1KFszq8UFCcWxnXuhZPUyHT9FK3gjmSKm6", + "sharesTotal": "521988495", + "midPrice": "0.574675", + "token": { + "address": "KT1REEb5VxWRjcHm5GzDMwErMmNFftsE5Gpf", + "decimals": 6, + "symbol": "USDS", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "USDtz", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 6, + "address": "KT1LN4LPSqTMS7Sd2CJw4bbDGRkMv2t68Fy9", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "60914.031705", + "tokenPool": "59523.252459000000000000000000000000000000", + "address": "KT1WxgZ1ZSfMgmsSDDcUn8Xn577HwnQ7e1Lb", + "sharesTotal": "15834334460", + "midPrice": "1.023365", + "token": { "address": "KT1LN4LPSqTMS7Sd2CJw4bbDGRkMv2t68Fy9", + "decimals": 6, + "symbol": "USDtz", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "33042.355189", - "tokenPool": "132352.411347000000000000000000000000000000", - "address": "KT1WxgZ1ZSfMgmsSDDcUn8Xn577HwnQ7e1Lb", - "sharesTotal": "19560266114", - "midPrice": "0.249654", - "token": { - "address": "KT1LN4LPSqTMS7Sd2CJw4bbDGRkMv2t68Fy9", - "decimals": 6, - "symbol": "USDtz", - "tokenId": 0, - "standard": "fa12" - } - } - ] - }, - { - "symbol": "wXTZ", - "address": "KT1VYsVfmobT7rsMVivvZ4J8i3bPiqz12NaH", + "standard": "fa12", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "XTZGOLD", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 0, + "address": "KT1S6t5PrHXnozytDU3vYdajmsenoBNYY8WJ", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1BnwzcFPp3Dudq5EKQUqrrcvZkYW2eJJSL", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1S6t5PrHXnozytDU3vYdajmsenoBNYY8WJ", + "decimals": 0, + "symbol": "XTZGOLD", + "tokenId": 0, + "standard": "fa12", + "thumbnailUri": null + } + }, + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1Wnq8KYjyntmGcwnHMz4DnaxhXtjTfv5zR", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1S6t5PrHXnozytDU3vYdajmsenoBNYY8WJ", + "decimals": 0, + "symbol": "XTZGOLD", + "tokenId": 0, + "standard": "fa12", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "BAN", + "thumbnailUri": "https://cloudflare-ipfs.com/ipfs/Qmaavk5fDP4g5e24R1KAntngK5Xo6Loj4cBu7KuYpqb6QW", + "tokenId": 0, + "decimals": 2, + "address": "KT1AhSVv4Se1j3Hf5Y6a56vBV44zNzjP91D2", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "58.083040", + "tokenPool": "12699.790000000000000000000000000000000000", + "address": "KT1Sd8jvepChHEHo63owNfjnqgzJEkUWSj9q", + "sharesTotal": "56552834", + "midPrice": "0.004574", + "token": { + "address": "KT1AhSVv4Se1j3Hf5Y6a56vBV44zNzjP91D2", + "decimals": 2, + "symbol": "BAN", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "30798.795952", - "tokenPool": "39370.070652000000000000000000000000000000", - "address": "KT1W3VGRUjvS869r4ror8kdaxqJAZUbPyjMT", - "sharesTotal": "31361917017", - "midPrice": "0.782290", - "token": { - "address": "KT1VYsVfmobT7rsMVivvZ4J8i3bPiqz12NaH", - "decimals": 6, - "symbol": "wXTZ", - "tokenId": 0, - "standard": "fa12" - } - } - ] - }, - { - "symbol": "UNO", - "address": "KT1ErKVqEhG9jxXgUG2KGLW3bNM7zXHX8SDF", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "29304.822121", - "tokenPool": "1328.309675535000000000000000000000000000", - "address": "KT1Cq3pyv6QEXugsAC2iyXr7ecFqN7fJVTnA", - "sharesTotal": "42585191933", - "midPrice": "22.061740", - "token": { - "address": "KT1ErKVqEhG9jxXgUG2KGLW3bNM7zXHX8SDF", - "decimals": 9, - "symbol": "UNO", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "WRAP", - "address": "KT1LRboPna9yQY9BrjtQYDS1DVxhKESK4VVd", + "standard": "fa2", + "thumbnailUri": "https://cloudflare-ipfs.com/ipfs/Qmaavk5fDP4g5e24R1KAntngK5Xo6Loj4cBu7KuYpqb6QW" + } + } + ] + }, + { + "symbol": "SHTz", + "thumbnailUri": "https://ibb.co/km908CD", + "tokenId": 0, + "decimals": 2, + "address": "KT19oivKN2qzeWgCs886BbttSVYtkcJHRtuQ", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "73.419943", + "tokenPool": "16140.480000000000000000000000000000000000", + "address": "KT1G7Z14RJLKbfu96Hc22bwNL67aykunAGyH", + "sharesTotal": "493429104", + "midPrice": "0.004549", + "token": { + "address": "KT19oivKN2qzeWgCs886BbttSVYtkcJHRtuQ", + "decimals": 2, + "symbol": "SHTz", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "22915.779374", - "tokenPool": "4067656.801007960000000000000000000000000000", - "address": "KT1FG63hhFtMEEEtmBSX2vuFmP87t9E7Ab4t", - "sharesTotal": "98765155785", - "midPrice": "0.005634", - "token": { - "address": "KT1LRboPna9yQY9BrjtQYDS1DVxhKESK4VVd", - "decimals": 8, - "symbol": "WRAP", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "wUSDC", - "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", - "tokenId": 17, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "22321.214332", - "tokenPool": "88926.020129000000000000000000000000000000", - "address": "KT1U2hs5eNdeCpHouAvQXGMzGFGJowbhjqmo", - "sharesTotal": "13449109679", - "midPrice": "0.251009", - "token": { - "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", - "decimals": 6, - "symbol": "wUSDC", - "tokenId": 17, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "PXL", - "address": "KT1F1mn2jbqQCJcsNgYKVAQjvenecNMY2oPK", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "21398.863956", - "tokenPool": "6565422.159833000000000000000000000000000000", - "address": "KT1UJ1hVTdiUen7H3zk1CXGC7PbANb57VkS4", - "sharesTotal": "24744341707", - "midPrice": "0.003259", - "token": { - "address": "KT1F1mn2jbqQCJcsNgYKVAQjvenecNMY2oPK", - "decimals": 6, - "symbol": "PXL", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "IDZ", - "address": "KT1WapdVeFqhCfqwdHWwTzSTX7yXoHgiPRPU", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "16282.353904", - "tokenPool": "766182.632718190000000000000000000000000000", - "address": "KT18rJtJNmwTfbJMinWqHzpkLeBQa4BVqGoJ", - "sharesTotal": "29113086219", - "midPrice": "0.021251", - "token": { - "address": "KT1WapdVeFqhCfqwdHWwTzSTX7yXoHgiPRPU", - "decimals": 8, - "symbol": "IDZ", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "SMAK", - "address": "KT1TwzD6zV3WeJ39ukuqxcfK2fJCnhvrdN1X", + "standard": "fa2", + "thumbnailUri": "https://ibb.co/km908CD" + } + } + ] + }, + { + "symbol": "RSAL", + "thumbnailUri": "ipfs://QmV7t21TwpmjRNWoXiqKhudVfZ8gYBDZksmzgDUHGpwz2z", + "tokenId": 0, + "decimals": 0, + "address": "KT19ovJhcsUn4YU8Q5L3BGovKSixfbWcecEA", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "282.488361", + "tokenPool": "6899723.000000000000000000000000000000000000", + "address": "KT1WDe2vJCDqz5euKupppQsioPcakUd45Tfo", + "sharesTotal": "978720729", + "midPrice": "0.000041", + "token": { + "address": "KT19ovJhcsUn4YU8Q5L3BGovKSixfbWcecEA", + "decimals": 0, + "symbol": "RSAL", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "14521.574513", - "tokenPool": "2504007.013000000000000000000000000000000000", - "address": "KT1Gdix8LoDoQng7YqdPNhdP5V7JRX8FqWvM", - "sharesTotal": "10314492410", - "midPrice": "0.005799", - "token": { - "address": "KT1TwzD6zV3WeJ39ukuqxcfK2fJCnhvrdN1X", - "decimals": 3, - "symbol": "SMAK", - "tokenId": 0, - "standard": "fa12" - } - } - ] - }, - { - "symbol": "ETHtz", + "standard": "fa2", + "thumbnailUri": "ipfs://QmV7t21TwpmjRNWoXiqKhudVfZ8gYBDZksmzgDUHGpwz2z" + } + } + ] + }, + { + "symbol": "ETHtz", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 18, + "address": "KT19at7rQUvyjxnZ2fBv7D9zc8rkyG7gAoU8", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "1888.156528", + "tokenPool": "0.817156619263801964000000000000000000", + "address": "KT1Evsp2yA19Whm24khvFPcwimK6UaAJu8Zo", + "sharesTotal": "556816392", + "midPrice": "2310.642150", + "token": { "address": "KT19at7rQUvyjxnZ2fBv7D9zc8rkyG7gAoU8", + "decimals": 18, + "symbol": "ETHtz", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "13591.507721", - "tokenPool": "17.491276471271562013000000000000000000", - "address": "KT1Evsp2yA19Whm24khvFPcwimK6UaAJu8Zo", - "sharesTotal": "7516739217", - "midPrice": "777.044931", - "token": { - "address": "KT19at7rQUvyjxnZ2fBv7D9zc8rkyG7gAoU8", - "decimals": 18, - "symbol": "ETHtz", - "tokenId": 0, - "standard": "fa12" - } - } - ] - }, - { - "symbol": "USDS", - "address": "KT1REEb5VxWRjcHm5GzDMwErMmNFftsE5Gpf", + "standard": "fa12", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "XTZSILVER", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 0, + "address": "KT1EqhKGcu9nztF5p9qa4c3cYVqVewQrJpi2", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1DCi4yga38ZY7omdp5UBYRZDvL3BvLFR8J", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1EqhKGcu9nztF5p9qa4c3cYVqVewQrJpi2", + "decimals": 0, + "symbol": "XTZSILVER", + "tokenId": 0, + "standard": "fa12", + "thumbnailUri": null + } + }, + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1U6Q15BPv6KAPxykhQTG5HfeB1bQdziEa9", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1EqhKGcu9nztF5p9qa4c3cYVqVewQrJpi2", + "decimals": 0, + "symbol": "XTZSILVER", + "tokenId": 0, + "standard": "fa12", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "bDAO", + "thumbnailUri": "ipfs://QmVMyqkFKAeyfGBeR81h72ugqj4UM8hjqA7KaKcnc35Vtt", + "tokenId": 0, + "decimals": 6, + "address": "KT1GUNKmkrgtMQjJp3XxcmCj6HZBhkUmMbge", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "93.792815", + "tokenPool": "159326.224247000000000000000000000000000000", + "address": "KT1DssMzoSr8fnUUq1WxeSuHfLG4gzS7pgge", + "sharesTotal": "2707427652", + "midPrice": "0.000589", + "token": { + "address": "KT1GUNKmkrgtMQjJp3XxcmCj6HZBhkUmMbge", + "decimals": 6, + "symbol": "bDAO", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "12555.745771", - "tokenPool": "50236.530252000000000000000000000000000000", - "address": "KT1KFszq8UFCcWxnXuhZPUyHT9FK3gjmSKm6", - "sharesTotal": "11741553111", - "midPrice": "0.249933", - "token": { - "address": "KT1REEb5VxWRjcHm5GzDMwErMmNFftsE5Gpf", - "decimals": 6, - "symbol": "USDS", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "wBUSD", - "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", - "tokenId": 1, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "12195.038766", - "tokenPool": "48653.633589211289394364000000000000000000", - "address": "KT1UMAE2PBskeQayP5f2ZbGiVYF7h8bZ2gyp", - "sharesTotal": "2567971151", - "midPrice": "0.250650", - "token": { - "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", - "decimals": 18, - "symbol": "wBUSD", - "tokenId": 1, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "INSTA", - "address": "KT19y6R8x53uDKiM46ahgguS6Tjqhdj2rSzZ", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "12142.799856", - "tokenPool": "1472066.216910162000000000000000000000000000", - "address": "KT1UzjhUhau9g5MjPxKUzM6KRJNwdW1oo52G", - "sharesTotal": "19222249915", - "midPrice": "0.008249", - "token": { - "address": "KT19y6R8x53uDKiM46ahgguS6Tjqhdj2rSzZ", - "decimals": 9, - "symbol": "INSTA", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "GOT", - "address": "KT1GioMCKwRyWoQpdrwxvsPVEsFJkkLyquVZ", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "11973.711716", - "tokenPool": "5512231.714893430000000000000000000000000000", - "address": "KT1JyPE1BWdYoRGBvvKhEPbcVRd3C9NCCwQC", - "sharesTotal": "43975894908", - "midPrice": "0.002172", - "token": { - "address": "KT1GioMCKwRyWoQpdrwxvsPVEsFJkkLyquVZ", - "decimals": 8, - "symbol": "GOT", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "crDAO", - "address": "KT1XPFjZqCULSnqfKaaYy8hJjeY63UNSGwXg", + "standard": "fa2", + "thumbnailUri": "ipfs://QmVMyqkFKAeyfGBeR81h72ugqj4UM8hjqA7KaKcnc35Vtt" + } + } + ] + }, + { + "symbol": "QLkUSD", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 36, + "address": "KT1AxaBxkFLCUi3f8rdDAAxBKHfzY8LfKDRA", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "75.041600", + "tokenPool": "307.817200272945635881699517499900907814", + "address": "KT1WtFb1mTsFRd1n1nAYMdrE2Ud9XREz5hjK", + "sharesTotal": "62800589", + "midPrice": "0.243786", + "token": { + "address": "KT1AxaBxkFLCUi3f8rdDAAxBKHfzY8LfKDRA", + "decimals": 36, + "symbol": "QLkUSD", + "tokenId": 0, + "standard": "fa12", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "SMAK", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 3, + "address": "KT1TwzD6zV3WeJ39ukuqxcfK2fJCnhvrdN1X", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "1795.749165", + "tokenPool": "547969.522000000000000000000000000000000000", + "address": "KT1Gdix8LoDoQng7YqdPNhdP5V7JRX8FqWvM", + "sharesTotal": "1287441308", + "midPrice": "0.003277", + "token": { + "address": "KT1TwzD6zV3WeJ39ukuqxcfK2fJCnhvrdN1X", + "decimals": 3, + "symbol": "SMAK", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "11492.285097", - "tokenPool": "595.007772090000000000000000000000000000", - "address": "KT1FHiJmJUgZMPtv5F8M4ZEa6cb1D9Lf758T", - "sharesTotal": "210995535439", - "midPrice": "19.314513", - "token": { - "address": "KT1XPFjZqCULSnqfKaaYy8hJjeY63UNSGwXg", - "decimals": 8, - "symbol": "crDAO", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "KALAM", - "address": "KT1A5P4ejnLix13jtadsfV9GCnXLMNnab8UT", + "standard": "fa12", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "GUTS", + "thumbnailUri": "https://cloudflare-ipfs.com/ipfs/Qmd5PwBHVLAUN1kRWAebDVjrMogJ9oUnNn8sowwTC7HgEv", + "tokenId": 0, + "decimals": 0, + "address": "KT1Nbc9cmx19qFrYYFpkiDoojVYL8UZJYVcj", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "25.341940", + "tokenPool": "7955.000000000000000000000000000000000000", + "address": "KT1WYQj3HEt3sxdsV4dMLA8RKzUnYAzXgguS", + "sharesTotal": "195340229", + "midPrice": "0.003186", + "token": { + "address": "KT1Nbc9cmx19qFrYYFpkiDoojVYL8UZJYVcj", + "decimals": 0, + "symbol": "GUTS", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://cloudflare-ipfs.com/ipfs/Qmd5PwBHVLAUN1kRWAebDVjrMogJ9oUnNn8sowwTC7HgEv" + } + }, + { + "name": "quipuswap", + "tezPool": "1.199702", + "tokenPool": "331.000000000000000000000000000000000000", + "address": "KT1GaR1CmFoTTjqRwYSE8WdpBuxuviKGbcqs", + "sharesTotal": "250438683", + "midPrice": "0.003624", + "token": { + "address": "KT1Nbc9cmx19qFrYYFpkiDoojVYL8UZJYVcj", + "decimals": 0, + "symbol": "GUTS", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://cloudflare-ipfs.com/ipfs/Qmd5PwBHVLAUN1kRWAebDVjrMogJ9oUnNn8sowwTC7HgEv" + } + } + ] + }, + { + "symbol": "tCOW", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 0, + "address": "KT1XQZxsG4pMgcN7q7Nu3XFihsb9mEvqBmAT", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "7.731054", + "tokenPool": "38342741.000000000000000000000000000000000000", + "address": "KT1UEfXGj5Ag73qCdZTk2534SZDT7cd7J8m8", + "sharesTotal": "16826436", + "midPrice": "0.000000", + "token": { + "address": "KT1XQZxsG4pMgcN7q7Nu3XFihsb9mEvqBmAT", + "decimals": 0, + "symbol": "tCOW", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "SWAP", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 0, + "address": "KT1Q3oMXVxL12Rz4GCwztu8wXBTfWWAM4r5t", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "3.726809", + "tokenPool": "9072104.000000000000000000000000000000000000", + "address": "KT1SArJcuCSKPzA2NBgR8QbXgD3acfDREBV5", + "sharesTotal": "159883710", + "midPrice": "0.000000", + "token": { + "address": "KT1Q3oMXVxL12Rz4GCwztu8wXBTfWWAM4r5t", + "decimals": 0, + "symbol": "SWAP", + "tokenId": 0, + "standard": "fa12", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "MAG", + "thumbnailUri": "ipfs://QmRGzetwTheMudNFfTAXqfiTbvcN4ZAhAzgUCBSMM43CbY", + "tokenId": 0, + "decimals": 6, + "address": "KT1H5KJDxuM9DURSfttepebb6Cn7GbvAAT45", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "905.248779", + "tokenPool": "5991591.287404000000000000000000000000000000", + "address": "KT1WREc3cpr36Nqjvegr6WSPgQKwDjL7XxLN", + "sharesTotal": "6951700025", + "midPrice": "0.000151", + "token": { + "address": "KT1H5KJDxuM9DURSfttepebb6Cn7GbvAAT45", + "decimals": 6, + "symbol": "MAG", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "11245.169082", - "tokenPool": "348567.516713693200000000000000000000000000", - "address": "KT1J3wTYb4xk5BsSBkg6ML55bX1xq7desS34", - "sharesTotal": "25978056970", - "midPrice": "0.032261", - "token": { - "address": "KT1A5P4ejnLix13jtadsfV9GCnXLMNnab8UT", - "decimals": 10, - "symbol": "KALAM", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "EASY", - "address": "KT1QgAtLPu3SNq9c6DPLanwL5bvfX3rgh2CS", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "9990.450982", - "tokenPool": "388342.760765000000000000000000000000000000", - "address": "KT1QHbWZPsXK8rpKkudNLmx4VVvgHvGqjnwP", - "sharesTotal": "12927545092", - "midPrice": "0.025726", - "token": { - "address": "KT1QgAtLPu3SNq9c6DPLanwL5bvfX3rgh2CS", - "decimals": 6, - "symbol": "EASY", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "wWBTC", - "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", - "tokenId": 19, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "9486.074637", - "tokenPool": "0.865489000000000000000000000000000000", - "address": "KT1DksKXvCBJN7Mw6frGj6y6F3CbABWZVpj1", - "sharesTotal": "8060569625", - "midPrice": "10960.364184", - "token": { - "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", - "decimals": 8, - "symbol": "wWBTC", - "tokenId": 19, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "kDAO", - "address": "KT1JkoE42rrMBP9b2oDhbx6EUr26GcySZMUH", + "standard": "fa12", + "thumbnailUri": "ipfs://QmRGzetwTheMudNFfTAXqfiTbvcN4ZAhAzgUCBSMM43CbY" + } + } + ] + }, + { + "symbol": "DJKHALED", + "thumbnailUri": "https://gifimage.net/wp-content/uploads/2017/09/another-one-dj-khaled-gif.gif", + "tokenId": 0, + "decimals": 3, + "address": "KT1N77LZAWvhEpMnq8rLhA3vpNcbXGsGqBpW", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "1.452659", + "tokenPool": "444761.070000000000000000000000000000000000", + "address": "KT1WnUVk9Z1Ua2UEHEraNRw48LYkmPvHbJwG", + "sharesTotal": "3128723", + "midPrice": "0.000003", + "token": { + "address": "KT1N77LZAWvhEpMnq8rLhA3vpNcbXGsGqBpW", + "decimals": 3, + "symbol": "DJKHALED", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://gifimage.net/wp-content/uploads/2017/09/another-one-dj-khaled-gif.gif" + } + } + ] + }, + { + "symbol": "TSV", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 0, + "address": "KT1B5LL3GRQL3uLbqwy3C8FL8H7CWj74EbnA", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "3.293935", + "tokenPool": "49837704.000000000000000000000000000000000000", + "address": "KT1Unphw5yMDcUNAtKpynxWPPLKDegAZQtzb", + "sharesTotal": "362399726", + "midPrice": "0.000000", + "token": { + "address": "KT1B5LL3GRQL3uLbqwy3C8FL8H7CWj74EbnA", + "decimals": 0, + "symbol": "TSV", + "tokenId": 0, + "standard": "fa12", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "CLOVER", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 6, + "address": "KT18jyxMDSMJRPPaZjoe49SUkXxax9QZtcWH", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "113.100288", + "tokenPool": "407030.379748000000000000000000000000000000", + "address": "KT1CYDRyzipkmRgndFrrYfyiAuwKxkFXxfki", + "sharesTotal": "2061666186", + "midPrice": "0.000278", + "token": { + "address": "KT18jyxMDSMJRPPaZjoe49SUkXxax9QZtcWH", + "decimals": 6, + "symbol": "CLOVER", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "8714.834712", - "tokenPool": "19935.968500846303916216000000000000000000", - "address": "KT1NEa7CmaLaWgHNi6LkRi5Z1f4oHfdzRdGA", - "sharesTotal": "363767285926", - "midPrice": "0.437141", - "token": { - "address": "KT1JkoE42rrMBP9b2oDhbx6EUr26GcySZMUH", - "decimals": 18, - "symbol": "kDAO", - "tokenId": 0, - "standard": "fa12" - } - } - ] - }, - { - "symbol": "wCRO", - "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", - "tokenId": 4, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "8267.170807", - "tokenPool": "81079.367626960000000000000000000000000000", - "address": "KT1GSjkSg6MFmEMnTJSk6uyYpWXaEYFahrS4", - "sharesTotal": "1521501248", - "midPrice": "0.101964", - "token": { - "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", - "decimals": 8, - "symbol": "wCRO", - "tokenId": 4, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "SZO", - "address": "KT1WzRVUnrJ4mNu59m9hPQZDY8Nq9JWtUbRf", + "standard": "fa12", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "wTaco", + "thumbnailUri": "ipfs://QmXsbFanpa6rTYXCWMzvDsynqnqn33TpFxe4K7qmQFB7ez", + "tokenId": 0, + "decimals": 0, + "address": "KT1WtCq6FuL2kYTK1x7AkmpPjb8wEJZTUwvX", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.018489", + "tokenPool": "9.000000000000000000000000000000000000", + "address": "KT1G1ap6QA8GkVTRhzFEUrjakuaYmnczfhgt", + "sharesTotal": "17271054", + "midPrice": "0.002054", + "token": { + "address": "KT1WtCq6FuL2kYTK1x7AkmpPjb8wEJZTUwvX", + "decimals": 0, + "symbol": "wTaco", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "ipfs://QmXsbFanpa6rTYXCWMzvDsynqnqn33TpFxe4K7qmQFB7ez" + } + }, + { + "name": "quipuswap", + "tezPool": "5.633198", + "tokenPool": "5470.000000000000000000000000000000000000", + "address": "KT1UV2rW49MUxvYVHrrQZejkr7mzaADQ3Wa4", + "sharesTotal": "98469270", + "midPrice": "0.001030", + "token": { + "address": "KT1WtCq6FuL2kYTK1x7AkmpPjb8wEJZTUwvX", + "decimals": 0, + "symbol": "wTaco", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "ipfs://QmXsbFanpa6rTYXCWMzvDsynqnqn33TpFxe4K7qmQFB7ez" + } + } + ] + }, + { + "symbol": "WRAP", + "thumbnailUri": "ipfs://Qma2o69VRZe8aPsuCUN1VRUE5k67vw2mFDXb35uDkqn17o", + "tokenId": 0, + "decimals": 8, + "address": "KT1LRboPna9yQY9BrjtQYDS1DVxhKESK4VVd", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "3354.725608", + "tokenPool": "386625.639225870000000000000000000000000000", + "address": "KT1FG63hhFtMEEEtmBSX2vuFmP87t9E7Ab4t", + "sharesTotal": "11453035755", + "midPrice": "0.008677", + "token": { + "address": "KT1LRboPna9yQY9BrjtQYDS1DVxhKESK4VVd", + "decimals": 8, + "symbol": "WRAP", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "7356.471185", - "tokenPool": "865559.066401000000000000000000000000000000", - "address": "KT1KnbXt3MCjXZNHJtUvzrK8wvBCBUcvhwrq", - "sharesTotal": "14690555704", - "midPrice": "0.008499", - "token": { - "address": "KT1WzRVUnrJ4mNu59m9hPQZDY8Nq9JWtUbRf", - "decimals": 6, - "symbol": "SZO", - "tokenId": 0, - "standard": "fa12" - } - } - ] - }, - { - "symbol": "PAUL", - "address": "KT19DUSZw7mfeEATrbWVPHRrWNVbNnmfFAE6", + "standard": "fa2", + "thumbnailUri": "ipfs://Qma2o69VRZe8aPsuCUN1VRUE5k67vw2mFDXb35uDkqn17o" + } + } + ] + }, + { + "symbol": "FEM", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 0, + "address": "KT1WHhATGLXFyhmZcK9k7NWo8nw53nDiBzWQ", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "46.152116", + "tokenPool": "6479.000000000000000000000000000000000000", + "address": "KT1LtDLC8HYRi2E9vyb41AoYcmxT7N2QmpM7", + "sharesTotal": "54311050", + "midPrice": "0.007123", + "token": { + "address": "KT1WHhATGLXFyhmZcK9k7NWo8nw53nDiBzWQ", + "decimals": 0, + "symbol": "FEM", + "tokenId": 0, + "standard": "fa12", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "PURPLE", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 6, + "address": "KT1Trhji1aVzDtGiAxiCfWNi9T74Kyi49DK1", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "95.909921", + "tokenPool": "297338671.625744000000000000000000000000000000", + "address": "KT1CgUDhiEQute6BxcgeSbZj3FiG2ZbdQC6B", + "sharesTotal": "1632387638", + "midPrice": "0.000000", + "token": { + "address": "KT1Trhji1aVzDtGiAxiCfWNi9T74Kyi49DK1", + "decimals": 6, + "symbol": "PURPLE", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "6242.860614", - "tokenPool": "1029162.776216660000000000000000000000000000", - "address": "KT1K8A8DLUTVuHaDBCZiG6AJdvKJbtH8dqmN", - "sharesTotal": "73707955355", - "midPrice": "0.006066", - "token": { - "address": "KT19DUSZw7mfeEATrbWVPHRrWNVbNnmfFAE6", - "decimals": 8, - "symbol": "PAUL", - "tokenId": 0, - "standard": "fa12" - } - } - ] - }, - { - "symbol": "FLAME", - "address": "KT1Wa8yqRBpFCusJWgcQyjhRz7hUQAmFxW7j", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "5968.770670", - "tokenPool": "56055227.312898000000000000000000000000000000", - "address": "KT1Q93ftAUzvfMGPwC78nX8eouL1VzmHPd4d", - "sharesTotal": "20539850983", - "midPrice": "0.000106", - "token": { - "address": "KT1Wa8yqRBpFCusJWgcQyjhRz7hUQAmFxW7j", - "decimals": 6, - "symbol": "FLAME", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "AQRtz", - "address": "KT19wuExNXayErfuCkcy6Z56cd1FWzF96xXk", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "5476.414917", - "tokenPool": "221777.453164444643450000000000000000000000", - "address": "KT1Sjz9RF7bABNi6rwaoWS8jGNmyf2RxJkrQ", - "sharesTotal": "7692258730", - "midPrice": "0.024693", - "token": { - "address": "KT19wuExNXayErfuCkcy6Z56cd1FWzF96xXk", - "decimals": 14, - "symbol": "AQRtz", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "STKR", - "address": "KT1AEfeckNbdEYwaMKkytBwPJPycz7jdSGea", + "standard": "fa12", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "FuADA", + "thumbnailUri": "https://static.thenounproject.com/png/197746-200.png", + "tokenId": 0, + "decimals": 6, + "address": "KT194SeMyG2Esh79sjTQjEBJuGeJmTbUn1gP", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.115496", + "tokenPool": "47848022.605731000000000000000000000000000000", + "address": "KT1DxE2SLAVXWfbzAKHtKzdf4cvCSQtdVwUT", + "sharesTotal": "6708267", + "midPrice": "0.000000", + "token": { + "address": "KT194SeMyG2Esh79sjTQjEBJuGeJmTbUn1gP", + "decimals": 6, + "symbol": "FuADA", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://static.thenounproject.com/png/197746-200.png" + } + } + ] + }, + { + "symbol": "wUSDC", + "thumbnailUri": "ipfs://QmQfHU9mYLRDU4yh2ihm3zrvVFxDrLPiXNYtMovUQE2S2t", + "tokenId": 17, + "decimals": 6, + "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "5864.228150", + "tokenPool": "3693.247522000000000000000000000000000000", + "address": "KT1U2hs5eNdeCpHouAvQXGMzGFGJowbhjqmo", + "sharesTotal": "1272356894", + "midPrice": "1.587824", + "token": { + "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", + "decimals": 6, + "symbol": "wUSDC", + "tokenId": 17, + "standard": "fa2", + "thumbnailUri": "ipfs://QmQfHU9mYLRDU4yh2ihm3zrvVFxDrLPiXNYtMovUQE2S2t" + } + } + ] + }, + { + "symbol": "PAUL", + "thumbnailUri": "ipfs://QmeoZ5ZnGnCMq8iGPeBjoS628c526DR37jnDstqEnTfkwC", + "tokenId": 0, + "decimals": 8, + "address": "KT19DUSZw7mfeEATrbWVPHRrWNVbNnmfFAE6", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "431.429879", + "tokenPool": "823689.349069210000000000000000000000000000", + "address": "KT1K8A8DLUTVuHaDBCZiG6AJdvKJbtH8dqmN", + "sharesTotal": "16660159853", + "midPrice": "0.000524", + "token": { + "address": "KT19DUSZw7mfeEATrbWVPHRrWNVbNnmfFAE6", + "decimals": 8, + "symbol": "PAUL", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "5327.872988", - "tokenPool": "2226053.681839625599424167000000000000000000", - "address": "KT1BMEEPX7MWzwwadW3NCSZe9XGmFJ7rs7Dr", - "sharesTotal": "18036621605", - "midPrice": "0.002393", - "token": { - "address": "KT1AEfeckNbdEYwaMKkytBwPJPycz7jdSGea", - "decimals": 18, - "symbol": "STKR", - "tokenId": 0, - "standard": "fa12" - } - } - ] - }, - { - "symbol": "wWETH", + "standard": "fa12", + "thumbnailUri": "ipfs://QmeoZ5ZnGnCMq8iGPeBjoS628c526DR37jnDstqEnTfkwC" + } + } + ] + }, + { + "symbol": "TQLA", + "thumbnailUri": "https://cryptocurrencytoday.net/images/TQLA-logo350x350.png", + "tokenId": 0, + "decimals": 8, + "address": "KT1SrgAVEF2jce4c2p1JAykWSGGzRgDwqmuL", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.873724", + "tokenPool": "1190188.920843330000000000000000000000000000", + "address": "KT1SKEp4kiJSSfKG6FJiRV3ckympSuLhfCH6", + "sharesTotal": "6262008", + "midPrice": "0.000001", + "token": { + "address": "KT1SrgAVEF2jce4c2p1JAykWSGGzRgDwqmuL", + "decimals": 8, + "symbol": "TQLA", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://cryptocurrencytoday.net/images/TQLA-logo350x350.png" + } + } + ] + }, + { + "symbol": "wWETH", + "thumbnailUri": "ipfs://Qmezz1ztvo5JFshHupBEdUzVppyMfJH6K4kPjQRSZp8cLq", + "tokenId": 20, + "decimals": 18, + "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "3943.011710", + "tokenPool": "1.464482430044930868000000000000000000", + "address": "KT1DuYujxrmgepwSDHtADthhKBje9BosUs1w", + "sharesTotal": "1327328396", + "midPrice": "2692.426778", + "token": { "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", + "decimals": 18, + "symbol": "wWETH", "tokenId": 20, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "5091.822112", - "tokenPool": "6.638463141209752713000000000000000000", - "address": "KT1DuYujxrmgepwSDHtADthhKBje9BosUs1w", - "sharesTotal": "3464022731", - "midPrice": "767.018209", - "token": { - "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", - "decimals": 18, - "symbol": "wWETH", - "tokenId": 20, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "SOIL", - "address": "KT1TtaMcoSx5cZrvaVBWsFoeZ1L15cxo5AEy", + "standard": "fa2", + "thumbnailUri": "ipfs://Qmezz1ztvo5JFshHupBEdUzVppyMfJH6K4kPjQRSZp8cLq" + } + } + ] + }, + { + "symbol": "kDAO", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 18, + "address": "KT1JkoE42rrMBP9b2oDhbx6EUr26GcySZMUH", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "1061.296869", + "tokenPool": "5878.344934101207159929000000000000000000", + "address": "KT1NEa7CmaLaWgHNi6LkRi5Z1f4oHfdzRdGA", + "sharesTotal": "63246102169", + "midPrice": "0.180543", + "token": { + "address": "KT1JkoE42rrMBP9b2oDhbx6EUr26GcySZMUH", + "decimals": 18, + "symbol": "kDAO", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "4995.979264", - "tokenPool": "834970652.209800000000000000000000000000000000", - "address": "KT1NXdxJkCiPkhwPvaT9CytFowuUoNcwGM1p", - "sharesTotal": "840081803", - "midPrice": "0.000006", - "token": { - "address": "KT1TtaMcoSx5cZrvaVBWsFoeZ1L15cxo5AEy", - "decimals": 4, - "symbol": "SOIL", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "akaDAO", - "address": "KT1AM3PV1cwmGRw28DVTgsjjsjHvmL6z4rGh", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "4668.789825", - "tokenPool": "79275.089331000000000000000000000000000000", - "address": "KT1Qej1k8WxPvBLUjGVtFXStgzQtcx3itSk5", - "sharesTotal": "8293660122", - "midPrice": "0.058894", - "token": { - "address": "KT1AM3PV1cwmGRw28DVTgsjjsjHvmL6z4rGh", - "decimals": 6, - "symbol": "akaDAO", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "MYH", - "address": "KT1BB1uMwVvJ1M3vVHXWALs1RWdgTp1rnXTR", + "standard": "fa12", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "CLEO", + "thumbnailUri": "https://www.google.com/url?sa=i&url=https%3A%2F%2Fwww.freepik.com%2Fpremium-vector%2Flucky-cat-design_7798646.htm&psig=AOvVaw0KuSKdczTDRp2n7n7O5mpE&ust=1622327772318000&source=images&cd=vfe&ved=0CAIQjRxqFwoTCKDM14a47fACFQAAAAAdAAAAABAL", + "tokenId": 0, + "decimals": 3, + "address": "KT1VEe2PES4F9nqsgQHdonPsFkTvKXLbbdha", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.378824", + "tokenPool": "1470502.613000000000000000000000000000000000", + "address": "KT1R8eiRrSoSHufHXPqevZZYEUVzBxhcdenP", + "sharesTotal": "22995322", + "midPrice": "0.000000", + "token": { + "address": "KT1VEe2PES4F9nqsgQHdonPsFkTvKXLbbdha", + "decimals": 3, + "symbol": "CLEO", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://www.google.com/url?sa=i&url=https%3A%2F%2Fwww.freepik.com%2Fpremium-vector%2Flucky-cat-design_7798646.htm&psig=AOvVaw0KuSKdczTDRp2n7n7O5mpE&ust=1622327772318000&source=images&cd=vfe&ved=0CAIQjRxqFwoTCKDM14a47fACFQAAAAAdAAAAABAL" + } + } + ] + }, + { + "symbol": "RITA", + "thumbnailUri": "https://static.thenounproject.com/png/72946-200.png", + "tokenId": 0, + "decimals": 6, + "address": "KT1Soa1U1fYRQEgg9No3Xvqxuv46kUZFFdJ6", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1L98jqwZtKUZbcPNxb3pTY7b2WXUGEzn8G", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1Soa1U1fYRQEgg9No3Xvqxuv46kUZFFdJ6", + "decimals": 6, + "symbol": "RITA", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://static.thenounproject.com/png/72946-200.png" + } + }, + { + "name": "quipuswap", + "tezPool": "0.116541", + "tokenPool": "107.950236000000000000000000000000000000", + "address": "KT1MFDftFLTGumy7qARZkwguxfwc6ZxPpVpA", + "sharesTotal": "1117702", + "midPrice": "0.001080", + "token": { + "address": "KT1Soa1U1fYRQEgg9No3Xvqxuv46kUZFFdJ6", + "decimals": 6, + "symbol": "RITA", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://static.thenounproject.com/png/72946-200.png" + } + } + ] + }, + { + "symbol": "HEH", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 6, + "address": "KT1G1cCRNBgQ48mVDjopHjEmTN5Sbtar8nn9", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "492.398525", + "tokenPool": "4557403.027766000000000000000000000000000000", + "address": "KT1BgezWwHBxA9NrczwK9x3zfgFnUkc7JJ4b", + "sharesTotal": "2230577711", + "midPrice": "0.000108", + "token": { + "address": "KT1G1cCRNBgQ48mVDjopHjEmTN5Sbtar8nn9", + "decimals": 6, + "symbol": "HEH", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "4361.429594", - "tokenPool": "8211405738.472129360000000000000000000000000000", - "address": "KT1Ed11bNukFdYSc3qQFZ2HGYdF13XU6WZ4A", - "sharesTotal": "1797343278", - "midPrice": "0.000001", - "token": { - "address": "KT1BB1uMwVvJ1M3vVHXWALs1RWdgTp1rnXTR", - "decimals": 8, - "symbol": "MYH", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "uUSD", - "address": "KT1XRPEPXbZK25r3Htzp2o1x7xdMMmfocKNW", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "4019.378703", - "tokenPool": "15999.013240961973000000000000000000000000", - "address": "KT1EtjRRCBC2exyCRXz8UfV7jz7svnkqi7di", - "sharesTotal": "3832305011", - "midPrice": "0.251227", - "token": { - "address": "KT1XRPEPXbZK25r3Htzp2o1x7xdMMmfocKNW", - "decimals": 12, - "symbol": "uUSD", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "hDAO", - "address": "KT1AFA2mwNUMNd4SsujE1YYp29vd8BZejyKW", + "standard": "fa12", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "HIGH", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 6, + "address": "KT18is91HB1F1RxtJE2e2ShXG9NYi4P68fNE", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "5.446532", + "tokenPool": "7272975476.469511000000000000000000000000000000", + "address": "KT1DD3JAKCZsvqBtqJWm17gRMSf2PxMLhJbD", + "sharesTotal": "856330645", + "midPrice": "0.000000", + "token": { + "address": "KT18is91HB1F1RxtJE2e2ShXG9NYi4P68fNE", + "decimals": 6, + "symbol": "HIGH", + "tokenId": 0, + "standard": "fa12", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "SKPx", + "thumbnailUri": "https://cloudflare-ipfs.com/ipfs/QmeZMKRxp1U2QnJbypHibtkcshAfKEnmVXAcSEg81n9dBH", + "tokenId": 0, + "decimals": 10, + "address": "KT18m6tZApSYdiicxNFP9PUinG6nsPri9jcS", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.614577", + "tokenPool": "79241.932127668300000000000000000000000000", + "address": "KT1QcjAPGokiVqeGDTJZuJuBvRJPtWtqSJFG", + "sharesTotal": "2174899", + "midPrice": "0.000008", + "token": { + "address": "KT18m6tZApSYdiicxNFP9PUinG6nsPri9jcS", + "decimals": 10, + "symbol": "SKPx", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://cloudflare-ipfs.com/ipfs/QmeZMKRxp1U2QnJbypHibtkcshAfKEnmVXAcSEg81n9dBH" + } + } + ] + }, + { + "symbol": "MEL", + "thumbnailUri": "https://img.favpng.com/23/24/22/cantaloupe-juice-hami-melon-charentais-melon-png-favpng-pNbCBd1GXZuFBu4S5ddaL5E9b.jpg", + "tokenId": 0, + "decimals": 6, + "address": "KT19mgJ3sCytBWXzZ1xgkZ7UMZS4HPKyGNo7", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "2.282499", + "tokenPool": "8.835443000000000000000000000000000000", + "address": "KT1BsDKTXBiYck85fJnoDzedyKKNtMuC9B9h", + "sharesTotal": "2000000", + "midPrice": "0.258334", + "token": { + "address": "KT19mgJ3sCytBWXzZ1xgkZ7UMZS4HPKyGNo7", + "decimals": 6, + "symbol": "MEL", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://img.favpng.com/23/24/22/cantaloupe-juice-hami-melon-charentais-melon-png-favpng-pNbCBd1GXZuFBu4S5ddaL5E9b.jpg" + } + } + ] + }, + { + "symbol": "PLENTY", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 18, + "address": "KT1GRSvLoikDsXujKgZPsGLX8k8VvR2Tq95b", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "16749.202511", + "tokenPool": "1101731.634421099915637881000000000000000000", + "address": "KT1X1LgNkQShpF9nRLYw3Dgdy4qp38MX617z", + "sharesTotal": "16865547295", + "midPrice": "0.015203", + "token": { + "address": "KT1GRSvLoikDsXujKgZPsGLX8k8VvR2Tq95b", + "decimals": 18, + "symbol": "PLENTY", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "3947.884975", - "tokenPool": "8996.547479000000000000000000000000000000", - "address": "KT1QxLqukyfohPV5kPkw97Rs6cw1DDDvYgbB", - "sharesTotal": "7443680535", - "midPrice": "0.438822", - "token": { - "address": "KT1AFA2mwNUMNd4SsujE1YYp29vd8BZejyKW", - "decimals": 6, - "symbol": "hDAO", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "TZD", - "address": "KT1RhRYoGmhDr4DShdggQqumRAhwAETxrs3t", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "3258.316349", - "tokenPool": "683971.359159480000000000000000000000000000", - "address": "KT1ERmjYo3hotAFmegVCJ2EAgUmc7RtXyV87", - "sharesTotal": "854348317", - "midPrice": "0.004764", - "token": { - "address": "KT1RhRYoGmhDr4DShdggQqumRAhwAETxrs3t", - "decimals": 8, - "symbol": "TZD", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "YOU", - "address": "KT1Xobej4mc6XgEjDoJoHtTKgbD1ELMvcQuL", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "2991.061181", - "tokenPool": "6227.872233972048000000000000000000000000", - "address": "KT1PL1YciLdwMbydt21Ax85iZXXyGSrKT2BE", - "sharesTotal": "2054174362", - "midPrice": "0.480270", - "token": { - "address": "KT1Xobej4mc6XgEjDoJoHtTKgbD1ELMvcQuL", - "decimals": 12, - "symbol": "YOU", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "SEB", - "address": "KT1981tPmXh4KrUQKZpQKb55kREX7QGJcF3E", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "2500.927843", - "tokenPool": "271420.790000000000000000000000000000000000", - "address": "KT1S4WyNiYPoYheihysddNh5hojNFdiVBwZL", - "sharesTotal": "982750181", - "midPrice": "0.009214", - "token": { - "address": "KT1981tPmXh4KrUQKZpQKb55kREX7QGJcF3E", - "decimals": 2, - "symbol": "SEB", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "uDEFI", - "address": "KT1XRPEPXbZK25r3Htzp2o1x7xdMMmfocKNW", - "tokenId": 1, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "1878.914341", - "tokenPool": "7398.288985269260000000000000000000000000", - "address": "KT1H8sJY2VzrbiX4pYeUVsoMUd4iGw2DV7XH", - "sharesTotal": "1653939566", - "midPrice": "0.253966", - "token": { - "address": "KT1XRPEPXbZK25r3Htzp2o1x7xdMMmfocKNW", - "decimals": 12, - "symbol": "uDEFI", - "tokenId": 1, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "wUSDT", - "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", - "tokenId": 18, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "1811.157561", - "tokenPool": "7294.424306000000000000000000000000000000", - "address": "KT1T4pfr6NL8dUiz8ibesjEvH2Ne3k6AuXgn", - "sharesTotal": "1534332464", - "midPrice": "0.248293", - "token": { - "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", - "decimals": 6, - "symbol": "wUSDT", - "tokenId": 18, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "MCH", - "address": "KT1ErKVqEhG9jxXgUG2KGLW3bNM7zXHX8SDF", - "tokenId": 3, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "1752.102243", - "tokenPool": "168871.154533309000000000000000000000000000", - "address": "KT1JAgJC6FTJ9SzGGits8GVonCr8cfFp5HGV", - "sharesTotal": "4587532628", - "midPrice": "0.010375", - "token": { - "address": "KT1ErKVqEhG9jxXgUG2KGLW3bNM7zXHX8SDF", - "decimals": 9, - "symbol": "MCH", - "tokenId": 3, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "pxlDAO", - "address": "KT1VQG4kZR6FkF8jppegp8cGhjJF66jJejLf", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "1696.379519", - "tokenPool": "87632.574708000000000000000000000000000000", - "address": "KT1RbvTVdb5jiT3dMyc9PxLdjzQD6QJjfZ9G", - "sharesTotal": "8069691172", - "midPrice": "0.019358", - "token": { - "address": "KT1VQG4kZR6FkF8jppegp8cGhjJF66jJejLf", - "decimals": 6, - "symbol": "pxlDAO", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "wLINK", - "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", - "tokenId": 10, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "1612.552274", - "tokenPool": "378.988797233743517490000000000000000000", - "address": "KT1Lpysr4nzcFegC9ci9kjoqVidwoanEmJWt", - "sharesTotal": "1760847724", - "midPrice": "4.254881", - "token": { - "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", - "decimals": 18, - "symbol": "wLINK", - "tokenId": 10, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "CVZA", - "address": "KT1BCzAq3PrTKPsEBKuoTGZdwX6rN6WE8rJj", + "standard": "fa12", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "TRAIN", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 6, + "address": "KT1ATbUg9w9CEKW9tYevik5Q2Y4iDxe3omWh", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.128257", + "tokenPool": "3441158.086913000000000000000000000000000000", + "address": "KT1FX2JpmzsrUebK2NNAYZWpU3C9HTPBHxMJ", + "sharesTotal": "14546282", + "midPrice": "0.000000", + "token": { + "address": "KT1ATbUg9w9CEKW9tYevik5Q2Y4iDxe3omWh", + "decimals": 6, + "symbol": "TRAIN", + "tokenId": 0, + "standard": "fa12", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "KALAM", + "thumbnailUri": "ipfs://Qme9FX9M7o2PZt9h6rvkUbfXoLpQr1HsuMQi6sL5Y75g3A", + "tokenId": 0, + "decimals": 10, + "address": "KT1A5P4ejnLix13jtadsfV9GCnXLMNnab8UT", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "372.400010", + "tokenPool": "573310.021633021700000000000000000000000000", + "address": "KT1J3wTYb4xk5BsSBkg6ML55bX1xq7desS34", + "sharesTotal": "5862446821", + "midPrice": "0.000650", + "token": { + "address": "KT1A5P4ejnLix13jtadsfV9GCnXLMNnab8UT", + "decimals": 10, + "symbol": "KALAM", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "1487.846235", - "tokenPool": "173902277.531223590000000000000000000000000000", - "address": "KT1F3BqwEAoa2koYX4Hz7zJ8xfGSxxAGVT8t", - "sharesTotal": "150624717", - "midPrice": "0.000009", - "token": { - "address": "KT1BCzAq3PrTKPsEBKuoTGZdwX6rN6WE8rJj", - "decimals": 8, - "symbol": "CVZA", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "ENR", - "address": "KT1ErKVqEhG9jxXgUG2KGLW3bNM7zXHX8SDF", - "tokenId": 2, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "1399.369280", - "tokenPool": "3797898.479499054000000000000000000000000000", - "address": "KT1GxxLmBC7tfx4Enpe5YLaCXppAKKfzNRYF", - "sharesTotal": "677901141066", - "midPrice": "0.000368", - "token": { - "address": "KT1ErKVqEhG9jxXgUG2KGLW3bNM7zXHX8SDF", - "decimals": 9, - "symbol": "ENR", - "tokenId": 2, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "MAG", - "address": "KT1H5KJDxuM9DURSfttepebb6Cn7GbvAAT45", + "standard": "fa2", + "thumbnailUri": "ipfs://Qme9FX9M7o2PZt9h6rvkUbfXoLpQr1HsuMQi6sL5Y75g3A" + } + } + ] + }, + { + "symbol": "BDoge", + "thumbnailUri": "https://i.imgur.com/FPoMO8F.png", + "tokenId": 0, + "decimals": 4, + "address": "KT1EMarewvdmyV42FDgGuhUhTKxrjutQWEBA", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "1.541132", + "tokenPool": "98118.169900000000000000000000000000000000", + "address": "KT1Th57AbgJmiZWDny6Ewqd2sx5qSxJwu8ry", + "sharesTotal": "6339564", + "midPrice": "0.000016", + "token": { + "address": "KT1EMarewvdmyV42FDgGuhUhTKxrjutQWEBA", + "decimals": 4, + "symbol": "BDoge", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.imgur.com/FPoMO8F.png" + } + } + ] + }, + { + "symbol": "UND", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 6, + "address": "KT1Mh8dtXqUD7MwqndKTs6BR7GmwusE2DFk3", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.183778", + "tokenPool": "14605594.604397000000000000000000000000000000", + "address": "KT1LWBsHXGrBcjyoYDmQHj2ezddFeue19Xpa", + "sharesTotal": "50520876", + "midPrice": "0.000000", + "token": { + "address": "KT1Mh8dtXqUD7MwqndKTs6BR7GmwusE2DFk3", + "decimals": 6, + "symbol": "UND", + "tokenId": 0, + "standard": "fa12", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "GONZ", + "thumbnailUri": "ipfs://QmRiiEnzKXHN9izVVkbBMgW2gpwJtqG7wjULByqZH8RrDr", + "tokenId": 0, + "decimals": 6, + "address": "KT1RTsRfBxLf6egtsXrQX1CcXCqKL3XwpuFT", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "304.390375", + "tokenPool": "87277946.287152000000000000000000000000000000", + "address": "KT1V2ycxoY55ACtvdbxQMM7d4wnQ1QCxTCJg", + "sharesTotal": "79198815569", + "midPrice": "0.000003", + "token": { + "address": "KT1RTsRfBxLf6egtsXrQX1CcXCqKL3XwpuFT", + "decimals": 6, + "symbol": "GONZ", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "1388.494029", - "tokenPool": "3739957.369699000000000000000000000000000000", - "address": "KT1WREc3cpr36Nqjvegr6WSPgQKwDjL7XxLN", - "sharesTotal": "6810262534", - "midPrice": "0.000371", - "token": { - "address": "KT1H5KJDxuM9DURSfttepebb6Cn7GbvAAT45", - "decimals": 6, - "symbol": "MAG", - "tokenId": 0, - "standard": "fa12" - } - } - ] - }, - { - "symbol": "wDAI", + "standard": "fa2", + "thumbnailUri": "ipfs://QmRiiEnzKXHN9izVVkbBMgW2gpwJtqG7wjULByqZH8RrDr" + } + } + ] + }, + { + "symbol": "wMATIC", + "thumbnailUri": "ipfs://QmchBnjRjpweznHes7bVKHwgzd8D6Q7Yzwf6KmA4KS6Dgi", + "tokenId": 11, + "decimals": 18, + "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "861.496530", + "tokenPool": "996.822887924728213651000000000000000000", + "address": "KT1RsfuBee5o7GtYrdB7bzQ1M6oVgyBnxY4S", + "sharesTotal": "244336281", + "midPrice": "0.864242", + "token": { "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", - "tokenId": 5, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "1291.473108", - "tokenPool": "5165.628435435341089447000000000000000000", - "address": "KT1PQ8TMzGMfViRq4tCMFKD2QF5zwJnY67Xn", - "sharesTotal": "1015848603", - "midPrice": "0.250013", - "token": { - "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", - "decimals": 18, - "symbol": "wDAI", - "tokenId": 5, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "hrDAO", - "address": "KT1ExpspQSag2x5dATrBxEQzrHP5PJd28fA4", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "1248.228395", - "tokenPool": "2114.347858000000000000000000000000000000", - "address": "KT1PiXcVdqgsaYnkQ7KAec9skLRMtmDcsnMy", - "sharesTotal": "4829060351", - "midPrice": "0.590361", - "token": { - "address": "KT1ExpspQSag2x5dATrBxEQzrHP5PJd28fA4", - "decimals": 6, - "symbol": "hrDAO", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "sDAO", - "address": "KT19ovJhcsUn4YU8Q5L3BGovKSixfbWcecEA", - "tokenId": 1, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "1138.358956", - "tokenPool": "676952.000000000000000000000000000000000000", - "address": "KT1PrRTVNgxkRgyqqNQvwTiVhd55dqyxXJ6n", - "sharesTotal": "1993090364", - "midPrice": "0.001682", - "token": { - "address": "KT19ovJhcsUn4YU8Q5L3BGovKSixfbWcecEA", - "decimals": 0, - "symbol": "sDAO", - "tokenId": 1, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "RCKT", - "address": "KT19JYndHaesXpvUfiwgg8BtE41HKkjjGMRC", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "1050.356742", - "tokenPool": "801307.429395000000000000000000000000000000", - "address": "KT1B7NqoQQkALYPS9fdxrcjGMQST6Wv4yy3h", - "sharesTotal": "2343221690", - "midPrice": "0.001311", - "token": { - "address": "KT19JYndHaesXpvUfiwgg8BtE41HKkjjGMRC", - "decimals": 6, - "symbol": "RCKT", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "FARM", - "address": "KT1CnuKyaAuYBAwJf9g5LobtxRZsF2KCD3o6", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "1000.942199", - "tokenPool": "41614884225.988500000000000000000000000000000000", - "address": "KT1NF5vZdWjYQcb8Uq9SkgTrLgc9P23AraX7", - "sharesTotal": "1846406319", - "midPrice": "0.000000", - "token": { - "address": "KT1CnuKyaAuYBAwJf9g5LobtxRZsF2KCD3o6", - "decimals": 4, - "symbol": "FARM", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { + "decimals": 18, "symbol": "wMATIC", - "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", "tokenId": 11, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "934.106162", - "tokenPool": "2092.633456615432282423000000000000000000", - "address": "KT1RsfuBee5o7GtYrdB7bzQ1M6oVgyBnxY4S", - "sharesTotal": "385267116", - "midPrice": "0.446378", - "token": { - "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", - "decimals": 18, - "symbol": "wMATIC", - "tokenId": 11, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "HERA", - "address": "KT1JXxK3bd39ayLiiBdKm2cdReYnVSG3bkzK", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "797.033731", - "tokenPool": "5113124.606000000000000000000000000000000000", - "address": "KT1DgbAE84xno2wdaEgeYpZkFZMs5fskAgP7", - "sharesTotal": "4810550167", - "midPrice": "0.000156", - "token": { - "address": "KT1JXxK3bd39ayLiiBdKm2cdReYnVSG3bkzK", - "decimals": 3, - "symbol": "HERA", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "WTZ", - "address": "KT1PnUZCp3u2KzWr93pn4DD7HAJnm3rWVrgn", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "620.035829", - "tokenPool": "613.018484000000000000000000000000000000", - "address": "KT1VXBX6NwapYf9Sq6LsQVr4SdsDq3ta1nss", - "sharesTotal": "544356067", - "midPrice": "1.011447", - "token": { - "address": "KT1PnUZCp3u2KzWr93pn4DD7HAJnm3rWVrgn", - "decimals": 6, - "symbol": "WTZ", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "HEH", - "address": "KT1G1cCRNBgQ48mVDjopHjEmTN5Sbtar8nn9", + "standard": "fa2", + "thumbnailUri": "ipfs://QmchBnjRjpweznHes7bVKHwgzd8D6Q7Yzwf6KmA4KS6Dgi" + } + } + ] + }, + { + "symbol": "RDL", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 2, + "address": "KT19wwvUweoZCTWcwkHt7espqpmGuBM5q62v", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.237532", + "tokenPool": "1670271.180000000000000000000000000000000000", + "address": "KT18qZcc2GRNjp74ipqmv8jReP3QXudv3xsd", + "sharesTotal": "19450418", + "midPrice": "0.000000", + "token": { + "address": "KT19wwvUweoZCTWcwkHt7espqpmGuBM5q62v", + "decimals": 2, + "symbol": "RDL", + "tokenId": 0, + "standard": "fa12", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "NFA", + "thumbnailUri": "https://raw.githubusercontent.com/piensa/piensa.github.io/ca0d007f5738312ac3eafdaa857b085245e7ba3d/img/nfa.png", + "tokenId": 0, + "decimals": 6, + "address": "KT1BAPFGXsXUpEAiBmTHkmTv8KGAqt5ZgwXZ", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "1.154860", + "tokenPool": "16100.825144000000000000000000000000000000", + "address": "KT1ULad9tYBY39FT8K1Dgtha7jD3qpygbLPG", + "sharesTotal": "133090620", + "midPrice": "0.000072", + "token": { + "address": "KT1BAPFGXsXUpEAiBmTHkmTv8KGAqt5ZgwXZ", + "decimals": 6, + "symbol": "NFA", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://raw.githubusercontent.com/piensa/piensa.github.io/ca0d007f5738312ac3eafdaa857b085245e7ba3d/img/nfa.png" + } + } + ] + }, + { + "symbol": "TTT", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 8, + "address": "KT1TsUFkH4pa48wmrGRmFpFW13nxHbP4xEKN", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "50.811292", + "tokenPool": "273231.993746490000000000000000000000000000", + "address": "KT1WYoYSdHNmNJf9pHWPoHJWDA3bid1NP9SJ", + "sharesTotal": "5400675", + "midPrice": "0.000186", + "token": { + "address": "KT1TsUFkH4pa48wmrGRmFpFW13nxHbP4xEKN", + "decimals": 8, + "symbol": "TTT", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "604.170489", - "tokenPool": "6376476.319471000000000000000000000000000000", - "address": "KT1BgezWwHBxA9NrczwK9x3zfgFnUkc7JJ4b", - "sharesTotal": "2945497436", - "midPrice": "0.000095", - "token": { - "address": "KT1G1cCRNBgQ48mVDjopHjEmTN5Sbtar8nn9", - "decimals": 6, - "symbol": "HEH", - "tokenId": 0, - "standard": "fa12" - } - } - ] - }, - { - "symbol": "BRR", - "address": "KT1UHNDNjrCAAiRbzZrtQF9qHSHVMYeJyX1y", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "473.246464", - "tokenPool": "307219033.118826000000000000000000000000000000", - "address": "KT1PmH3JCEo65koqSGGUArKSpbKMN8dJ3BPZ", - "sharesTotal": "362392750", - "midPrice": "0.000002", - "token": { - "address": "KT1UHNDNjrCAAiRbzZrtQF9qHSHVMYeJyX1y", - "decimals": 6, - "symbol": "BRR", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "wHUSD", - "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", - "tokenId": 8, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "406.195601", - "tokenPool": "1630.839139160000000000000000000000000000", - "address": "KT1AN7BBmeSUN5eDDQLEhWmXv1gn4exc5k8R", - "sharesTotal": "118531268", - "midPrice": "0.249072", - "token": { - "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", - "decimals": 8, - "symbol": "wHUSD", - "tokenId": 8, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "GSAL", - "address": "KT1VHd7ysjnvxEzwtjBAmYAmasvVCfPpSkiG", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "402.100304", - "tokenPool": "9184993.000000000000000000000000000000000000", - "address": "KT1BzNUUjURkTtNhXFkbGtu9fY3Q5scKZrvK", - "sharesTotal": "1316252713", - "midPrice": "0.000044", - "token": { - "address": "KT1VHd7ysjnvxEzwtjBAmYAmasvVCfPpSkiG", - "decimals": 0, - "symbol": "GSAL", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "ptai", - "address": "KT1AyVdjSZffJtiMkdwwztEK7ePVyTogzogr", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "391.093136", - "tokenPool": "3912.760100000000000000000000000000000000", - "address": "KT1TtpMxWwAR41b8f8k4ujqjd8YoWvYDR5tN", - "sharesTotal": "122504055", - "midPrice": "0.099953", - "token": { - "address": "KT1AyVdjSZffJtiMkdwwztEK7ePVyTogzogr", - "decimals": 4, - "symbol": "ptai", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "bDAO", - "address": "KT1GUNKmkrgtMQjJp3XxcmCj6HZBhkUmMbge", + "standard": "fa2", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "MOZ", + "thumbnailUri": "ipfs://QmTYMWr7NC5a35WMTx6FutDKFysd4XiuJc86gb8UJnCqLU", + "tokenId": 0, + "decimals": 18, + "address": "KT1JJUWAb6WHoKpzT2Ga5Y4rgMAkeptKHqQ8", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1A91CcMx1izXcbBwyH3z8Do3vnEdKpbde2", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1JJUWAb6WHoKpzT2Ga5Y4rgMAkeptKHqQ8", + "decimals": 18, + "symbol": "MOZ", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "ipfs://QmTYMWr7NC5a35WMTx6FutDKFysd4XiuJc86gb8UJnCqLU" + } + } + ] + }, + { + "symbol": "SOIL", + "thumbnailUri": "https://i.ibb.co/4ML6VkV/kisspng-humus-portable-network-graphics-soil-clip-art-houm-5c4429fd079dc0-6393132415479710690312.jpg", + "tokenId": 0, + "decimals": 4, + "address": "KT1TtaMcoSx5cZrvaVBWsFoeZ1L15cxo5AEy", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "5048.241301", + "tokenPool": "832932048.712500000000000000000000000000000000", + "address": "KT1NXdxJkCiPkhwPvaT9CytFowuUoNcwGM1p", + "sharesTotal": "842065638", + "midPrice": "0.000006", + "token": { + "address": "KT1TtaMcoSx5cZrvaVBWsFoeZ1L15cxo5AEy", + "decimals": 4, + "symbol": "SOIL", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "383.297963", - "tokenPool": "107100.277002000000000000000000000000000000", - "address": "KT1DssMzoSr8fnUUq1WxeSuHfLG4gzS7pgge", - "sharesTotal": "4505742333", - "midPrice": "0.003579", - "token": { - "address": "KT1GUNKmkrgtMQjJp3XxcmCj6HZBhkUmMbge", - "decimals": 6, - "symbol": "bDAO", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "DeMN", - "address": "KT1GBgCd5dk7v4TSzWvtk1X64TxMyG4r7eRX", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "383.072266", - "tokenPool": "255911.778525250000000000000000000000000000", - "address": "KT1TcGBPvmcHawQLdFx5ADDo2hR6XMDhRVdc", - "sharesTotal": "97752670", - "midPrice": "0.001497", - "token": { - "address": "KT1GBgCd5dk7v4TSzWvtk1X64TxMyG4r7eRX", - "decimals": 8, - "symbol": "DeMN", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "PLAT", - "address": "KT1SybeY3QZ3kX4PS5ZXhxyv2dZWghTFuCdu", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "381.746179", - "tokenPool": "1.410300000000000000000000000000000000", - "address": "KT1TZFWpS7zvLCsGEqS3xjvC4SkfngeyszyY", - "sharesTotal": "1291140826", - "midPrice": "270.684379", - "token": { - "address": "KT1SybeY3QZ3kX4PS5ZXhxyv2dZWghTFuCdu", - "decimals": 6, - "symbol": "PLAT", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "ECN", - "address": "KT1M81KrJr6TxYLkZkVqcpSTNKGoya8XytWT", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "377.176703", - "tokenPool": "77099.119149380000000000000000000000000000", - "address": "KT1D9PA7tvuCe9XnDskd2F67XwdrT4ueqjGe", - "sharesTotal": "963159364", - "midPrice": "0.004892", - "token": { - "address": "KT1M81KrJr6TxYLkZkVqcpSTNKGoya8XytWT", - "decimals": 8, - "symbol": "ECN", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "RSAL", - "address": "KT19ovJhcsUn4YU8Q5L3BGovKSixfbWcecEA", + "standard": "fa2", + "thumbnailUri": "https://i.ibb.co/4ML6VkV/kisspng-humus-portable-network-graphics-soil-clip-art-houm-5c4429fd079dc0-6393132415479710690312.jpg" + } + } + ] + }, + { + "symbol": "PLP", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 18, + "address": "KT1UC3vcVZ4K9b39uQxaMNA2N1RuJXKLCnoA", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.001710", + "tokenPool": "0.125803581493723153000000000000000000", + "address": "KT1R5KNMvNPFVUCGugEVGn93k6J7ffXQMUKq", + "sharesTotal": "1000", + "midPrice": "0.013593", + "token": { + "address": "KT1UC3vcVZ4K9b39uQxaMNA2N1RuJXKLCnoA", + "decimals": 18, + "symbol": "PLP", + "tokenId": 0, + "standard": "fa12", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "$MOZ", + "thumbnailUri": "ipfs://QmTYMWr7NC5a35WMTx6FutDKFysd4XiuJc86gb8UJnCqLU", + "tokenId": 0, + "decimals": 4, + "address": "KT1GUnUAxdLUUPrA46hhjY7Pdv1CkppMZyXB", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1SFJpp5pRDpBPCbqGv529HrTZ6Dck3ZVf3", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1GUnUAxdLUUPrA46hhjY7Pdv1CkppMZyXB", + "decimals": 4, + "symbol": "$MOZ", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "ipfs://QmTYMWr7NC5a35WMTx6FutDKFysd4XiuJc86gb8UJnCqLU" + } + } + ] + }, + { + "symbol": "BART", + "thumbnailUri": "https://i2.wp.com/bullishart.com/wp-content/uploads/2021/02/logo.jpg", + "tokenId": 0, + "decimals": 9, + "address": "KT1T3Ly4RkMehwNpC4iWr86EV5D155bTRvce", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "31.217370", + "tokenPool": "64717192.439338108000000000000000000000000000", + "address": "KT1WJVYEjLRirPQDSWqfggjqFGn14y9hiCBL", + "sharesTotal": "2969461736", + "midPrice": "0.000000", + "token": { + "address": "KT1T3Ly4RkMehwNpC4iWr86EV5D155bTRvce", + "decimals": 9, + "symbol": "BART", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i2.wp.com/bullishart.com/wp-content/uploads/2021/02/logo.jpg" + } + } + ] + }, + { + "symbol": "STZ", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 4, + "address": "KT1JzicjcZQYMKtK3yWE5wPYxBmZ1mLemHqS", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1Tq6syBASKHgULz3jxXTBGqcmnuPW5H6or", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1JzicjcZQYMKtK3yWE5wPYxBmZ1mLemHqS", + "decimals": 4, + "symbol": "STZ", + "tokenId": 0, + "standard": "fa12", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "EVIL", + "thumbnailUri": "https://media.discordapp.net/attachments/688132602086948868/851575721615818752/coin.png", + "tokenId": 0, + "decimals": 4, + "address": "KT1Ava7Qm338ZJj83P1ZhNbGkaRZM8N1FsPD", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "38.823852", + "tokenPool": "48.572200000000000000000000000000000000", + "address": "KT1Ap7YfZAstC8sbnE6Kwm9iywt13NjwRrNB", + "sharesTotal": "30256099", + "midPrice": "0.799302", + "token": { + "address": "KT1Ava7Qm338ZJj83P1ZhNbGkaRZM8N1FsPD", + "decimals": 4, + "symbol": "EVIL", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "345.617711", - "tokenPool": "6317857.000000000000000000000000000000000000", - "address": "KT1WDe2vJCDqz5euKupppQsioPcakUd45Tfo", - "sharesTotal": "1042611342", - "midPrice": "0.000055", - "token": { - "address": "KT19ovJhcsUn4YU8Q5L3BGovKSixfbWcecEA", - "decimals": 0, - "symbol": "RSAL", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "wAAVE", + "standard": "fa2", + "thumbnailUri": "https://media.discordapp.net/attachments/688132602086948868/851575721615818752/coin.png" + } + } + ] + }, + { + "symbol": "NOLA", + "thumbnailUri": "QmVk8qWMfJ79d3pVv6PnTpZerzP7cBjNhbmDyZrfF53TfD", + "tokenId": 0, + "decimals": 6, + "address": "KT1SrP7phqe9meFbMF4Z2YsSq3XuLU1mw9BM", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "2.137222", + "tokenPool": "627.498817000000000000000000000000000000", + "address": "KT1Fm5fS6VhFyE9wgopXcoQ3Nyb5awLY2sQH", + "sharesTotal": "36085852", + "midPrice": "0.003406", + "token": { + "address": "KT1SrP7phqe9meFbMF4Z2YsSq3XuLU1mw9BM", + "decimals": 6, + "symbol": "NOLA", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "QmVk8qWMfJ79d3pVv6PnTpZerzP7cBjNhbmDyZrfF53TfD" + } + } + ] + }, + { + "symbol": "STZ", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 4, + "address": "KT1Xdy9ZuhYBgoQqugyr2mtaeGMqoYxCDABB", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.238441", + "tokenPool": "74599.501100000000000000000000000000000000", + "address": "KT1DpUFdR6Utxa79TMG5WEbyD5dRW2jpc2Fc", + "sharesTotal": "200000", + "midPrice": "0.000003", + "token": { + "address": "KT1Xdy9ZuhYBgoQqugyr2mtaeGMqoYxCDABB", + "decimals": 4, + "symbol": "STZ", + "tokenId": 0, + "standard": "fa12", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "SPI", + "thumbnailUri": "ipfs://QmYQdCWFh26rPoaYNLFBa3mQg3EyXyfgJ5ktG4YrkbD4AZ", + "tokenId": 0, + "decimals": 6, + "address": "KT1CS2xKGHNPTauSh5Re4qE3N9PCfG5u4dPx", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "22.070446", + "tokenPool": "34029.438481000000000000000000000000000000", + "address": "KT1Eg2QesN1tCzScTrvoeKm5W67GgjV32McR", + "sharesTotal": "565324681", + "midPrice": "0.000649", + "token": { + "address": "KT1CS2xKGHNPTauSh5Re4qE3N9PCfG5u4dPx", + "decimals": 6, + "symbol": "SPI", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "ipfs://QmYQdCWFh26rPoaYNLFBa3mQg3EyXyfgJ5ktG4YrkbD4AZ" + } + } + ] + }, + { + "symbol": "wSUSHI", + "thumbnailUri": "ipfs://QmTpss9a4uL3op7x5Lte7CcTKUSUhZsM1Gr34BWNvZCfy4", + "tokenId": 15, + "decimals": 18, + "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "28.201260", + "tokenPool": "49.739811818422974539000000000000000000", + "address": "KT1Lotcahh85kp878JCEc1TjetZ2EgqB24vA", + "sharesTotal": "51919844", + "midPrice": "0.566976", + "token": { "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", + "decimals": 18, + "symbol": "wSUSHI", + "tokenId": 15, + "standard": "fa2", + "thumbnailUri": "ipfs://QmTpss9a4uL3op7x5Lte7CcTKUSUhZsM1Gr34BWNvZCfy4" + } + } + ] + }, + { + "symbol": "xPLENTY", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 18, + "address": "KT1Rpviewjg82JgjGfAKFneSupjAR1kUhbza", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1B4UQTW1P8kgasbbmEPUeaEQF68mPxMpc8", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1Rpviewjg82JgjGfAKFneSupjAR1kUhbza", + "decimals": 18, + "symbol": "xPLENTY", + "tokenId": 0, + "standard": "fa12", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "MYH", + "thumbnailUri": "https://drive.google.com/file/d/11rVImQ35Oc6vRWKbf6Z9s3fh61cCSg3-/view", + "tokenId": 0, + "decimals": 8, + "address": "KT1LmNXekg1sJTGiLdf8p5i4FyZoqk1XFB8b", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1TDemRmFqRviTnD2poa2N6AdtAuVScsK98", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1LmNXekg1sJTGiLdf8p5i4FyZoqk1XFB8b", + "decimals": 8, + "symbol": "MYH", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "338.336564", - "tokenPool": "8.680123639656074981000000000000000000", - "address": "KT1Lvtxpg4MiT2Bs38XGxwh3LGi5MkCENp4v", - "sharesTotal": "320944708", - "midPrice": "38.978312", - "token": { - "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", - "decimals": 18, - "symbol": "wAAVE", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "CHIPS", - "address": "KT19uWeDEun67XcoPHPs59FFHsS24Jh12osw", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "329.527503", - "tokenPool": "38741756.452875330000000000000000000000000000", - "address": "KT1Fmcb7LXTki2xx9omhzpjsgwhgDNXsrYWs", - "sharesTotal": "110687342300988", - "midPrice": "0.000009", - "token": { - "address": "KT19uWeDEun67XcoPHPs59FFHsS24Jh12osw", - "decimals": 8, - "symbol": "CHIPS", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "TCZ", - "address": "KT1GGxCNiJ7yaBAH4hAw5AHXbP3PSmAiy3wK", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "303.706197", - "tokenPool": "811694231.411701780061349239000000000000000000", - "address": "KT1VfiExduEkrpM4TbsnAw9QV1VURqaRFGKs", - "sharesTotal": "2198609371", - "midPrice": "0.000000", - "token": { - "address": "KT1GGxCNiJ7yaBAH4hAw5AHXbP3PSmAiy3wK", - "decimals": 18, - "symbol": "TCZ", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "SEXP", - "address": "KT1Kyc366SrSJ1camxByr363F9WAiHAaReMv", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "295.062213", - "tokenPool": "705106394.442317695553881391000000000000000000", - "address": "KT1EVNuwjj7GijvVaxR7Vd9mejy4V6toZkeK", - "sharesTotal": "3288673942", - "midPrice": "0.000000", - "token": { - "address": "KT1Kyc366SrSJ1camxByr363F9WAiHAaReMv", - "decimals": 18, - "symbol": "SEXP", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "GONZ", - "address": "KT1RTsRfBxLf6egtsXrQX1CcXCqKL3XwpuFT", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "278.159871", - "tokenPool": "180275782.126972000000000000000000000000000000", - "address": "KT1V2ycxoY55ACtvdbxQMM7d4wnQ1QCxTCJg", - "sharesTotal": "109586018179", - "midPrice": "0.000002", - "token": { - "address": "KT1RTsRfBxLf6egtsXrQX1CcXCqKL3XwpuFT", - "decimals": 6, - "symbol": "GONZ", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "CLOVER", - "address": "KT18jyxMDSMJRPPaZjoe49SUkXxax9QZtcWH", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "274.593237", - "tokenPool": "278584.927064000000000000000000000000000000", - "address": "KT1CYDRyzipkmRgndFrrYfyiAuwKxkFXxfki", - "sharesTotal": "2661106297", - "midPrice": "0.000986", - "token": { - "address": "KT18jyxMDSMJRPPaZjoe49SUkXxax9QZtcWH", - "decimals": 6, - "symbol": "CLOVER", - "tokenId": 0, - "standard": "fa12" - } - } - ] - }, - { - "symbol": "PURPLE", - "address": "KT1Trhji1aVzDtGiAxiCfWNi9T74Kyi49DK1", + "standard": "fa2", + "thumbnailUri": "https://drive.google.com/file/d/11rVImQ35Oc6vRWKbf6Z9s3fh61cCSg3-/view" + } + } + ] + }, + { + "symbol": "CVZA", + "thumbnailUri": "https://i.ibb.co/KyQJRDt/output-onlineimagetools.png", + "tokenId": 0, + "decimals": 8, + "address": "KT1BCzAq3PrTKPsEBKuoTGZdwX6rN6WE8rJj", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "442.741786", + "tokenPool": "314357283.880830080000000000000000000000000000", + "address": "KT1F3BqwEAoa2koYX4Hz7zJ8xfGSxxAGVT8t", + "sharesTotal": "110107364", + "midPrice": "0.000001", + "token": { + "address": "KT1BCzAq3PrTKPsEBKuoTGZdwX6rN6WE8rJj", + "decimals": 8, + "symbol": "CVZA", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "220.821572", - "tokenPool": "172625658.538755000000000000000000000000000000", - "address": "KT1CgUDhiEQute6BxcgeSbZj3FiG2ZbdQC6B", - "sharesTotal": "1899279200", - "midPrice": "0.000001", - "token": { - "address": "KT1Trhji1aVzDtGiAxiCfWNi9T74Kyi49DK1", - "decimals": 6, - "symbol": "PURPLE", - "tokenId": 0, - "standard": "fa12" - } - } - ] - }, - { - "symbol": "BDVXP", - "address": "KT1T1PeeRDbsKDYM2nX8JjJ1kkAhHh5FnjgC", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "202.188174", - "tokenPool": "11279557.157761000000000000000000000000000000", - "address": "KT1C755xS3TLH4HEWaCJvWuoHTcytTBdEjgS", - "sharesTotal": "569916802", - "midPrice": "0.000018", - "token": { - "address": "KT1T1PeeRDbsKDYM2nX8JjJ1kkAhHh5FnjgC", - "decimals": 6, - "symbol": "BDVXP", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "NATAS", - "address": "KT1GaEvbD4zA3pHs7mv3grpuqR1KGtjXAEDe", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "200.483823", - "tokenPool": "4483.000000000000000000000000000000000000", - "address": "KT1Xoo3KC18TjW5dSLeQwVkk9pkCL26hZfva", - "sharesTotal": "28993535", - "midPrice": "0.044721", - "token": { - "address": "KT1GaEvbD4zA3pHs7mv3grpuqR1KGtjXAEDe", - "decimals": 0, - "symbol": "NATAS", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "BEEF", - "address": "KT1M2Ws52krJrwJi1ZFsmVfazBiafWYKZTvd", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "187.745977", - "tokenPool": "1150150028.553931000000000000000000000000000000", - "address": "KT1BtmMAnmTGHAA9ZV8xPzuwZu4ibL7f5qb3", - "sharesTotal": "1933774233", - "midPrice": "0.000000", - "token": { - "address": "KT1M2Ws52krJrwJi1ZFsmVfazBiafWYKZTvd", - "decimals": 6, - "symbol": "BEEF", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "Bezos", - "address": "KT1J4m9nxZQSKDwRNahAL1fziuwW9o5hb8Tb", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "167.308162", - "tokenPool": "344015181.000000000000000000000000000000000000", - "address": "KT1ETAtdv2PTvXwbGGsWWjnswfagdUc77hiP", - "sharesTotal": "165483101", - "midPrice": "0.000000", - "token": { - "address": "KT1J4m9nxZQSKDwRNahAL1fziuwW9o5hb8Tb", - "decimals": 0, - "symbol": "Bezos", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "EVIL", - "address": "KT1Ava7Qm338ZJj83P1ZhNbGkaRZM8N1FsPD", + "standard": "fa2", + "thumbnailUri": "https://i.ibb.co/KyQJRDt/output-onlineimagetools.png" + } + } + ] + }, + { + "symbol": "ctez", + "thumbnailUri": "ipfs://Qme4ybadbY4H84h5WLPjdo47YQUxxVoJHWZrwYq2JZriM4", + "tokenId": 0, + "decimals": 6, + "address": "KT1SjXiUX63QvdNMcM2m492f7kuf8JxXRLp4", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "658.871355", + "tokenPool": "566.142780000000000000000000000000000000", + "address": "KT1FbYwEWU8BTfrvNoL5xDEC5owsDxv9nqKT", + "sharesTotal": "554914053", + "midPrice": "1.163790", + "token": { + "address": "KT1SjXiUX63QvdNMcM2m492f7kuf8JxXRLp4", + "decimals": 6, + "symbol": "ctez", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "150.274518", - "tokenPool": "56.076100000000000000000000000000000000", - "address": "KT1Ap7YfZAstC8sbnE6Kwm9iywt13NjwRrNB", - "sharesTotal": "64142654", - "midPrice": "2.679832", - "token": { - "address": "KT1Ava7Qm338ZJj83P1ZhNbGkaRZM8N1FsPD", - "decimals": 4, - "symbol": "EVIL", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "WOJAK", - "address": "KT1DH7nnWLSBM5f4i8KehH1F5nMvDvknXgJj", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "148.857000", - "tokenPool": "1228.442772970000000000000000000000000000", - "address": "KT1RyjnbuY3WNqQ29jarPynBQMqa5JyvQNbA", - "sharesTotal": "134267705", - "midPrice": "0.121175", - "token": { - "address": "KT1DH7nnWLSBM5f4i8KehH1F5nMvDvknXgJj", - "decimals": 8, - "symbol": "WOJAK", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "dUAC", - "address": "KT1N6eu73zztodRsxhJSMEU7R7sxmyBcCV2t", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "141.374679", - "tokenPool": "349373.339886270000000000000000000000000000", - "address": "KT1E9Ze9JGKZGb4jZne86EqLvLuA3woSZvPV", - "sharesTotal": "85916053", - "midPrice": "0.000405", - "token": { - "address": "KT1N6eu73zztodRsxhJSMEU7R7sxmyBcCV2t", - "decimals": 8, - "symbol": "dUAC", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "uBTC", - "address": "KT1XRPEPXbZK25r3Htzp2o1x7xdMMmfocKNW", - "tokenId": 2, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "140.475423", - "tokenPool": "0.012694656401000000000000000000000000", - "address": "KT1Ao9HNxW9tqGMAvAMGyvP36VhJEUGWVRpx", - "sharesTotal": "149204425", - "midPrice": "11065.712892", - "token": { - "address": "KT1XRPEPXbZK25r3Htzp2o1x7xdMMmfocKNW", - "decimals": 12, - "symbol": "uBTC", - "tokenId": 2, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "YODA", - "address": "KT1BdFvYD2Z1cPEMoREUtMNBcBPmrm5s4Xww", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "130.314529", - "tokenPool": "25947637.349727000000000000000000000000000000", - "address": "KT1X3vM69kdau4dAYa7ZXLdT5H6Gpyvoniui", - "sharesTotal": "125000000", - "midPrice": "0.000005", - "token": { - "address": "KT1BdFvYD2Z1cPEMoREUtMNBcBPmrm5s4Xww", - "decimals": 6, - "symbol": "YODA", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "WHEAT", - "address": "KT1DgP4K39T1Wqqax9YZuwnkstnY1gNtqcri", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "127.585406", - "tokenPool": "51677636583.096049000000000000000000000000000000", - "address": "KT1DZuoqhhA6rcViB4seqDbjYDgr3UfCFNt3", - "sharesTotal": "5631863597", - "midPrice": "0.000000", - "token": { - "address": "KT1DgP4K39T1Wqqax9YZuwnkstnY1gNtqcri", - "decimals": 6, - "symbol": "WHEAT", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "fDAO", - "address": "KT1KPoyzkj82Sbnafm6pfesZKEhyCpXwQfMc", + "standard": "fa12", + "thumbnailUri": "ipfs://Qme4ybadbY4H84h5WLPjdo47YQUxxVoJHWZrwYq2JZriM4" + } + } + ] + }, + { + "symbol": "MYH", + "thumbnailUri": "https://geldhelden.org/myh.png", + "tokenId": 0, + "decimals": 8, + "address": "KT1BB1uMwVvJ1M3vVHXWALs1RWdgTp1rnXTR", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "7770.486417", + "tokenPool": "245367354420.388125910000000000000000000000000000", + "address": "KT1Ed11bNukFdYSc3qQFZ2HGYdF13XU6WZ4A", + "sharesTotal": "12702343489", + "midPrice": "0.000000", + "token": { + "address": "KT1BB1uMwVvJ1M3vVHXWALs1RWdgTp1rnXTR", + "decimals": 8, + "symbol": "MYH", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "127.344507", - "tokenPool": "152.558221000000000000000000000000000000", - "address": "KT1BweorZK1CJDEu76SyKcxfzeiAxip73Kot", - "sharesTotal": "468959606", - "midPrice": "0.834727", - "token": { - "address": "KT1KPoyzkj82Sbnafm6pfesZKEhyCpXwQfMc", - "decimals": 6, - "symbol": "fDAO", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "TZK", - "address": "KT1JoBx9GQmWZts7vdUEe5uU2wsWZiAhrepf", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "125.335818", - "tokenPool": "5377230.721840970000000000000000000000000000", - "address": "KT1StK6SjE5TsxpCpKPBHwrVs7VpND5L97jK", - "sharesTotal": "297848180", - "midPrice": "0.000023", - "token": { - "address": "KT1JoBx9GQmWZts7vdUEe5uU2wsWZiAhrepf", - "decimals": 8, - "symbol": "TZK", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "BOGDANOFF", - "address": "KT1QaHZUKx3vZEwjSD4r5KpSkKUdHyg2HMCC", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "120.728003", - "tokenPool": "0.834700000000000000000000000000000000", - "address": "KT1SFefVtCDkAPj2KtiDm3Rc3rdLyK7Y5stP", - "sharesTotal": "100000000", - "midPrice": "144.636400", - "token": { - "address": "KT1QaHZUKx3vZEwjSD4r5KpSkKUdHyg2HMCC", - "decimals": 4, - "symbol": "BOGDANOFF", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "MIN", - "address": "KT1ErKVqEhG9jxXgUG2KGLW3bNM7zXHX8SDF", - "tokenId": 1, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "120.034024", - "tokenPool": "263714.431561594000000000000000000000000000", - "address": "KT1H5YwfF6nmFZavwzftddbcfxAXmbGhyDCY", - "sharesTotal": "1593975784", - "midPrice": "0.000455", - "token": { - "address": "KT1ErKVqEhG9jxXgUG2KGLW3bNM7zXHX8SDF", - "decimals": 9, - "symbol": "MIN", - "tokenId": 1, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "DRIP", - "address": "KT1XsmJTskZtrJUUmaz3D7nynaZ28mM8HCez", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "114.131884", - "tokenPool": "877151.745572140000000000000000000000000000", - "address": "KT1HWT1vYFyn1t1y5z1Ma2SWr8Lx8UzGjCwM", - "sharesTotal": "0", - "midPrice": "0.000130", - "token": { - "address": "KT1XsmJTskZtrJUUmaz3D7nynaZ28mM8HCez", - "decimals": 8, - "symbol": "DRIP", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "ONE", - "address": "KT1VRB9X1KjCpaxT5V7PQrTxQPunLejQLwG7", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "109.451249", - "tokenPool": "0.083046246000000000000000000000000000", - "address": "KT1Js2KkULwMdJM8iZH8G36qb56skqSWuhce", - "sharesTotal": "4200200", - "midPrice": "1317.955408", - "token": { - "address": "KT1VRB9X1KjCpaxT5V7PQrTxQPunLejQLwG7", - "decimals": 10, - "symbol": "ONE", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "wPAX", + "standard": "fa2", + "thumbnailUri": "https://geldhelden.org/myh.png" + } + } + ] + }, + { + "symbol": "wDAI", + "thumbnailUri": "ipfs://QmVov6RtfRNzuQGvGKmhnABUsfCiDKvn31amg8DUxzowtM", + "tokenId": 5, + "decimals": 18, + "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "738.815221", + "tokenPool": "722.499440425175431681000000000000000000", + "address": "KT1PQ8TMzGMfViRq4tCMFKD2QF5zwJnY67Xn", + "sharesTotal": "275807409", + "midPrice": "1.022582", + "token": { "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", - "tokenId": 14, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "108.788396", - "tokenPool": "524.563362269141307218000000000000000000", - "address": "KT1Ca5FGSeFLH3ugstc5p56gJDMPeraBcDqE", - "sharesTotal": "94387415", - "midPrice": "0.207388", - "token": { - "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", - "decimals": 18, - "symbol": "wPAX", - "tokenId": 14, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "tChicken", - "address": "KT1QoDjTpkG9jmAMwrPCsaRR78xHDcRKydBp", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "102.656481", - "tokenPool": "107777520.235348000000000000000000000000000000", - "address": "KT1JzZtBeHDBS9XyEqUc9nZhsqcfeNLxVV1T", - "sharesTotal": "147358871", - "midPrice": "0.000001", - "token": { - "address": "KT1QoDjTpkG9jmAMwrPCsaRR78xHDcRKydBp", - "decimals": 6, - "symbol": "tChicken", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "wSUSHI", + "decimals": 18, + "symbol": "wDAI", + "tokenId": 5, + "standard": "fa2", + "thumbnailUri": "ipfs://QmVov6RtfRNzuQGvGKmhnABUsfCiDKvn31amg8DUxzowtM" + } + } + ] + }, + { + "symbol": "YEZ", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 8, + "address": "KT1SL8LGYTBrKjPydUawSFGZXWWVzwnkRjEN", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "2.618629", + "tokenPool": "364413.559697720000000000000000000000000000", + "address": "KT1TYMNmRjbTpqdTz4hAwbJD9Now3Kxv2ycz", + "sharesTotal": "96770552", + "midPrice": "0.000007", + "token": { + "address": "KT1SL8LGYTBrKjPydUawSFGZXWWVzwnkRjEN", + "decimals": 8, + "symbol": "YEZ", + "tokenId": 0, + "standard": "fa12", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "TED", + "thumbnailUri": "https://mryamz.github.io/images/element_pics/Teddy%20Coin.png", + "tokenId": 0, + "decimals": 2, + "address": "KT1AjD9hAkXifoYtECD7wuP5ZCz1AjfjQTXJ", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.037091", + "tokenPool": "3.830000000000000000000000000000000000", + "address": "KT1PmmaD34R8nK1d1ra8nUZfBFcTWGLmAjgG", + "sharesTotal": "521996", + "midPrice": "0.009684", + "token": { + "address": "KT1AjD9hAkXifoYtECD7wuP5ZCz1AjfjQTXJ", + "decimals": 2, + "symbol": "TED", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://mryamz.github.io/images/element_pics/Teddy%20Coin.png" + } + } + ] + }, + { + "symbol": "wLINK", + "thumbnailUri": "ipfs://QmeaRuB578Xgy8jxbTxqmQ9s5wyioAEP85V7qbJFnn2uT8", + "tokenId": 10, + "decimals": 18, + "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "316.196684", + "tokenPool": "20.305639731310218322000000000000000000", + "address": "KT1Lpysr4nzcFegC9ci9kjoqVidwoanEmJWt", + "sharesTotal": "170846924", + "midPrice": "15.571865", + "token": { "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", - "tokenId": 15, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "102.604810", - "tokenPool": "104.362886582537582696000000000000000000", - "address": "KT1Lotcahh85kp878JCEc1TjetZ2EgqB24vA", - "sharesTotal": "144665771", - "midPrice": "0.983154", - "token": { - "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", - "decimals": 18, - "symbol": "wSUSHI", - "tokenId": 15, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "GANJA", - "address": "KT1NYhjbPh1mPz6DoBsgBRzpLAUTAJbLP9TU", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "100.223422", - "tokenPool": "6863787.000000000000000000000000000000000000", - "address": "KT1NNdfrEgMLsWbYaPyMKsUXkqTSh8hcPs9X", - "sharesTotal": "52386161", - "midPrice": "0.000015", - "token": { - "address": "KT1NYhjbPh1mPz6DoBsgBRzpLAUTAJbLP9TU", - "decimals": 0, - "symbol": "GANJA", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "tDAO", + "decimals": 18, + "symbol": "wLINK", + "tokenId": 10, + "standard": "fa2", + "thumbnailUri": "ipfs://QmeaRuB578Xgy8jxbTxqmQ9s5wyioAEP85V7qbJFnn2uT8" + } + } + ] + }, + { + "symbol": "EVSE", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 0, + "address": "KT1LqEyTQxD2Dsdkk4LME5YGcBqazAwXrg4t", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "3.458658", + "tokenPool": "223471276482.000000000000000000000000000000000000", + "address": "KT1TUvwNmhJT47PYEvT5y5ZXfAPjQv6JUGwv", + "sharesTotal": "7628846", + "midPrice": "0.000000", + "token": { + "address": "KT1LqEyTQxD2Dsdkk4LME5YGcBqazAwXrg4t", + "decimals": 0, + "symbol": "EVSE", + "tokenId": 0, + "standard": "fa12", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "SHIHTZU", + "thumbnailUri": "https://i.imgur.com/xDRnby1.png", + "tokenId": 0, + "decimals": 2, + "address": "KT1R52Gk7LzWvyV41oP9dRUbboHs4yVTXAZT", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "40.385732", + "tokenPool": "6228931.520000000000000000000000000000000000", + "address": "KT19NB2rNZ8zHULS4cGM4NgjqJJuANVVX8xq", + "sharesTotal": "50039270", + "midPrice": "0.000006", + "token": { + "address": "KT1R52Gk7LzWvyV41oP9dRUbboHs4yVTXAZT", + "decimals": 2, + "symbol": "SHIHTZU", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.imgur.com/xDRnby1.png" + } + } + ] + }, + { + "symbol": "tDAO", + "thumbnailUri": "https://www.cryptoliveleak.org/wp-content/uploads/2021/04/Taco-bold.png", + "tokenId": 0, + "decimals": 4, + "address": "KT1Cjx8hYwzaCAke6rLWoZBLp8w89VeAduAR", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "49.980606", + "tokenPool": "476241838.456000000000000000000000000000000000", + "address": "KT1X6dAh8fwQMkWC9yh4yuvkJaS5NjqY4NvW", + "sharesTotal": "64822659", + "midPrice": "0.000000", + "token": { "address": "KT1Cjx8hYwzaCAke6rLWoZBLp8w89VeAduAR", + "decimals": 4, + "symbol": "tDAO", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "95.525696", - "tokenPool": "465171525.416600000000000000000000000000000000", - "address": "KT1X6dAh8fwQMkWC9yh4yuvkJaS5NjqY4NvW", - "sharesTotal": "89722010", - "midPrice": "0.000000", - "token": { - "address": "KT1Cjx8hYwzaCAke6rLWoZBLp8w89VeAduAR", - "decimals": 4, - "symbol": "tDAO", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "BAN", - "address": "KT1AhSVv4Se1j3Hf5Y6a56vBV44zNzjP91D2", + "standard": "fa2", + "thumbnailUri": "https://www.cryptoliveleak.org/wp-content/uploads/2021/04/Taco-bold.png" + } + } + ] + }, + { + "symbol": "SZO", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 6, + "address": "KT1WzRVUnrJ4mNu59m9hPQZDY8Nq9JWtUbRf", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "1.726616", + "tokenPool": "641.418253000000000000000000000000000000", + "address": "KT1KnbXt3MCjXZNHJtUvzrK8wvBCBUcvhwrq", + "sharesTotal": "6111847", + "midPrice": "0.002692", + "token": { + "address": "KT1WzRVUnrJ4mNu59m9hPQZDY8Nq9JWtUbRf", + "decimals": 6, + "symbol": "SZO", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "77.408710", - "tokenPool": "9158.750000000000000000000000000000000000", - "address": "KT1Sd8jvepChHEHo63owNfjnqgzJEkUWSj9q", - "sharesTotal": "55498300", - "midPrice": "0.008452", - "token": { - "address": "KT1AhSVv4Se1j3Hf5Y6a56vBV44zNzjP91D2", - "decimals": 2, - "symbol": "BAN", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "BIRD", - "address": "KT1GkBaPh5pnPYNjMvm3hCGp6Q7tay1pkbjT", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "74.191881", - "tokenPool": "277.890700000000000000000000000000000000", - "address": "KT1SbBu8v8Knwx2kTD4hawbFYu8h4oKX8J6X", - "sharesTotal": "13323072", - "midPrice": "0.266982", - "token": { - "address": "KT1GkBaPh5pnPYNjMvm3hCGp6Q7tay1pkbjT", - "decimals": 4, - "symbol": "BIRD", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "SHTz", - "address": "KT19oivKN2qzeWgCs886BbttSVYtkcJHRtuQ", + "standard": "fa12", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "ICE", + "thumbnailUri": "http://clipart-library.com/clipart/1930063.htm", + "tokenId": 0, + "decimals": 3, + "address": "KT1QVU1DYYx5tSf1QvptdhVHvKo2YSmR3qfp", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1XbbzHsLaKJaU3srEyPXt2JhvGMRviG8g6", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1QVU1DYYx5tSf1QvptdhVHvKo2YSmR3qfp", + "decimals": 3, + "symbol": "ICE", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "http://clipart-library.com/clipart/1930063.htm" + } + } + ] + }, + { + "symbol": "rugDao", + "thumbnailUri": "https://ipfs.io/ipfs/Qmdqbhy533eYfDvPMY4NS5Gpneezra7vJYFYCfLkkjyTmZ", + "tokenId": 0, + "decimals": 2, + "address": "KT1EZ5Kerx82fxsvPSnMKsnvPp7Yue9oHNRY", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.358651", + "tokenPool": "146.270000000000000000000000000000000000", + "address": "KT1D3tdqrEkcwKkhJso5jmrJiyiaNVWtYiFJ", + "sharesTotal": "49433", + "midPrice": "0.002452", + "token": { + "address": "KT1EZ5Kerx82fxsvPSnMKsnvPp7Yue9oHNRY", + "decimals": 2, + "symbol": "rugDao", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://ipfs.io/ipfs/Qmdqbhy533eYfDvPMY4NS5Gpneezra7vJYFYCfLkkjyTmZ" + } + } + ] + }, + { + "symbol": "SHL", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 6, + "address": "KT1X5okZZpcUvqFZ2r7GA8rRifrSzYrCky8P", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "18.933034", + "tokenPool": "557788838.117003000000000000000000000000000000", + "address": "KT1S1AkQeYMsw4V7d9gPj9rxCPuht4QwSCLe", + "sharesTotal": "839859994", + "midPrice": "0.000000", + "token": { + "address": "KT1X5okZZpcUvqFZ2r7GA8rRifrSzYrCky8P", + "decimals": 6, + "symbol": "SHL", + "tokenId": 0, + "standard": "fa12", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "fDAO", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 6, + "address": "KT1KPoyzkj82Sbnafm6pfesZKEhyCpXwQfMc", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "14.288493", + "tokenPool": "3117.237142000000000000000000000000000000", + "address": "KT1BweorZK1CJDEu76SyKcxfzeiAxip73Kot", + "sharesTotal": "623482148", + "midPrice": "0.004584", + "token": { + "address": "KT1KPoyzkj82Sbnafm6pfesZKEhyCpXwQfMc", + "decimals": 6, + "symbol": "fDAO", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "71.679669", - "tokenPool": "16730.650000000000000000000000000000000000", - "address": "KT1G7Z14RJLKbfu96Hc22bwNL67aykunAGyH", - "sharesTotal": "496478190", - "midPrice": "0.004284", - "token": { - "address": "KT19oivKN2qzeWgCs886BbttSVYtkcJHRtuQ", - "decimals": 2, - "symbol": "SHTz", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "wUNI", - "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", - "tokenId": 16, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "71.402314", - "tokenPool": "29.052452199486376918000000000000000000", - "address": "KT1Ti3nJT85vNn81Dy5VyNzgufkAorUoZ96q", - "sharesTotal": "39226985", - "midPrice": "2.457704", - "token": { - "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", - "decimals": 18, - "symbol": "wUNI", - "tokenId": 16, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "AVO", - "address": "KT18k2r2n87iRLC38k8ogoZL2uLx2WrvGA1v", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "70.466341", - "tokenPool": "133897473.819863000000000000000000000000000000", - "address": "KT1Cj8DKpSimWLD8JLxAgxhfuNjTH7fheTJj", - "sharesTotal": "94984042", - "midPrice": "0.000001", - "token": { - "address": "KT18k2r2n87iRLC38k8ogoZL2uLx2WrvGA1v", - "decimals": 6, - "symbol": "AVO", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "TTT", - "address": "KT1TsUFkH4pa48wmrGRmFpFW13nxHbP4xEKN", + "standard": "fa2", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "DONTz", + "thumbnailUri": "https://i.imgur.com/axeSNTv.png", + "tokenId": 0, + "decimals": 2, + "address": "KT1T9kFJD5fKAT4LAZWjYBCaWNbD7cw1CUju", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "2.225576", + "tokenPool": "63730.710000000000000000000000000000000000", + "address": "KT1FaPEfr2hGTR1d4tN9VikubuSVS1CuuMJX", + "sharesTotal": "1174812", + "midPrice": "0.000035", + "token": { + "address": "KT1T9kFJD5fKAT4LAZWjYBCaWNbD7cw1CUju", + "decimals": 2, + "symbol": "DONTz", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.imgur.com/axeSNTv.png" + } + } + ] + }, + { + "symbol": "PLAYA", + "thumbnailUri": "ipfs://QmNsCng8GnWRMbtSVxFrkmgb2rA7RKoeu6YznunDEEFvee", + "tokenId": 0, + "decimals": 8, + "address": "KT1AhFqs7dbJjLq6FPSjv2EEJX7jVq4BxvuA", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "2.427464", + "tokenPool": "347539.190729730000000000000000000000000000", + "address": "KT1U4XkzQ5iDQPGxcMxDYC7PHySnfYKxPY5v", + "sharesTotal": "2000000", + "midPrice": "0.000007", + "token": { + "address": "KT1AhFqs7dbJjLq6FPSjv2EEJX7jVq4BxvuA", + "decimals": 8, + "symbol": "PLAYA", + "tokenId": 0, + "standard": "fa12", + "thumbnailUri": "ipfs://QmNsCng8GnWRMbtSVxFrkmgb2rA7RKoeu6YznunDEEFvee" + } + } + ] + }, + { + "symbol": "UPMA", + "thumbnailUri": "https://www.dropbox.com/s/futkhsgqalkui8j/Upma_2.png?dl=1", + "tokenId": 0, + "decimals": 4, + "address": "KT1RACesjuf2ApJBjW6HnsV3w4MTuCcroUup", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "5.227006", + "tokenPool": "47908.444000000000000000000000000000000000", + "address": "KT1FcxZ14sMs1ejM1VdvYeBzPKyru7cthw2Q", + "sharesTotal": "5000000", + "midPrice": "0.000109", + "token": { + "address": "KT1RACesjuf2ApJBjW6HnsV3w4MTuCcroUup", + "decimals": 4, + "symbol": "UPMA", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://www.dropbox.com/s/futkhsgqalkui8j/Upma_2.png?dl=1" + } + } + ] + }, + { + "symbol": "BEEz", + "thumbnailUri": "https://imgur.com/kKf8GaL.png", + "tokenId": 0, + "decimals": 2, + "address": "KT1GAWT8469ueGEyzWyEgXtJJetgQEeZFnE2", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "3.272823", + "tokenPool": "4407.190000000000000000000000000000000000", + "address": "KT1A4tYKJDJHrLonvp4qkJpZz5fkoWcAxMxW", + "sharesTotal": "725183", + "midPrice": "0.000743", + "token": { + "address": "KT1GAWT8469ueGEyzWyEgXtJJetgQEeZFnE2", + "decimals": 2, + "symbol": "BEEz", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://imgur.com/kKf8GaL.png" + } + } + ] + }, + { + "symbol": "oXTZ", + "thumbnailUri": "ipfs://QmYJzMTxBbYHLLNMRWvvtFaTofUPyqgrEhDcjjFonCgNGS", + "tokenId": 0, + "decimals": 6, + "address": "KT1TjnZYs5CGLbmV6yuW169P8Pnr9BiVwwjz", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.056137", + "tokenPool": "0.051908000000000000000000000000000000", + "address": "KT1AZt2pnfn68oC2xTYguywrE2ZccYb57YhF", + "sharesTotal": "36738", + "midPrice": "1.081471", + "token": { + "address": "KT1TjnZYs5CGLbmV6yuW169P8Pnr9BiVwwjz", + "decimals": 6, + "symbol": "oXTZ", + "tokenId": 0, + "standard": "fa12", + "thumbnailUri": "ipfs://QmYJzMTxBbYHLLNMRWvvtFaTofUPyqgrEhDcjjFonCgNGS" + } + } + ] + }, + { + "symbol": "crDAO", + "thumbnailUri": "ipfs://bafybeigulbzm5x72qtmckxqvd3ksk6q3vlklxjgpnvvnbcofgdp6qwu43u", + "tokenId": 0, + "decimals": 8, + "address": "KT1XPFjZqCULSnqfKaaYy8hJjeY63UNSGwXg", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "1.574014", + "tokenPool": "7458.628684790000000000000000000000000000", + "address": "KT1FHiJmJUgZMPtv5F8M4ZEa6cb1D9Lf758T", + "sharesTotal": "7644369097", + "midPrice": "0.000211", + "token": { + "address": "KT1XPFjZqCULSnqfKaaYy8hJjeY63UNSGwXg", + "decimals": 8, + "symbol": "crDAO", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "68.094183", - "tokenPool": "273244.163300570000000000000000000000000000", - "address": "KT1WYoYSdHNmNJf9pHWPoHJWDA3bid1NP9SJ", - "sharesTotal": "6253487", - "midPrice": "0.000249", - "token": { - "address": "KT1TsUFkH4pa48wmrGRmFpFW13nxHbP4xEKN", - "decimals": 8, - "symbol": "TTT", - "tokenId": 0, - "standard": "fa2" - } - } - ] - } - ] + "standard": "fa2", + "thumbnailUri": "ipfs://bafybeigulbzm5x72qtmckxqvd3ksk6q3vlklxjgpnvvnbcofgdp6qwu43u" + } + } + ] + }, + { + "symbol": "gDAO", + "thumbnailUri": "https://ipfs.io/ipfs/QmNv5MMjh3k86wPaDRnWeE8kY1PMV7eS4TS1TW9ZAe42aV?filename=gdao.PNG", + "tokenId": 0, + "decimals": 6, + "address": "KT1HU2eCMzZhSHUpuBQjaN3L6un77iQvbZgy", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.427598", + "tokenPool": "141.122677000000000000000000000000000000", + "address": "KT198myhugqAVvtNbYgN4sBKMFRYBvprcKHf", + "sharesTotal": "767675", + "midPrice": "0.003030", + "token": { + "address": "KT1HU2eCMzZhSHUpuBQjaN3L6un77iQvbZgy", + "decimals": 6, + "symbol": "gDAO", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://ipfs.io/ipfs/QmNv5MMjh3k86wPaDRnWeE8kY1PMV7eS4TS1TW9ZAe42aV?filename=gdao.PNG" + } + } + ] + }, + { + "symbol": "DOGA", + "thumbnailUri": "ipfs://QmW8sa5UygUKg58LLzK7NoEDtCRyAQU4wZh1rbpFa6j7kP", + "tokenId": 0, + "decimals": 5, + "address": "KT1Ha4yFVeyzw6KRAdkzq6TxDHB97KG4pZe8", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "20046.061731", + "tokenPool": "1412021.834030000000000000000000000000000000", + "address": "KT1Ucg1fTZXBD8P426rTRXyu7YQUgYXV7RVu", + "sharesTotal": "117845451124", + "midPrice": "0.014197", + "token": { + "address": "KT1Ha4yFVeyzw6KRAdkzq6TxDHB97KG4pZe8", + "decimals": 5, + "symbol": "DOGA", + "tokenId": 0, + "standard": "fa12", + "thumbnailUri": "ipfs://QmW8sa5UygUKg58LLzK7NoEDtCRyAQU4wZh1rbpFa6j7kP" + } + } + ] + }, + { + "symbol": "WEED", + "thumbnailUri": "https://i.ibb.co/YjBMj7b/WEEDTOKENIMG.jpg", + "tokenId": 0, + "decimals": 8, + "address": "KT1VX7wfHgmXPgemsagY8UxNSPv5fKxvUSYK", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "35.135442", + "tokenPool": "231447.886554730000000000000000000000000000", + "address": "KT1VEKgCCYCudjfvLZaEh4havFiJMmxMgNdX", + "sharesTotal": "105935771", + "midPrice": "0.000152", + "token": { + "address": "KT1VX7wfHgmXPgemsagY8UxNSPv5fKxvUSYK", + "decimals": 8, + "symbol": "WEED", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.ibb.co/YjBMj7b/WEEDTOKENIMG.jpg" + } + } + ] + }, + { + "symbol": "wPAX", + "thumbnailUri": "ipfs://QmZD5QDAeAUyyLYKiMmxD4vfWpVeYHctcbTkPmo4NudDHt", + "tokenId": 14, + "decimals": 18, + "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "159.817515", + "tokenPool": "304.303866262751590589000000000000000000", + "address": "KT1Ca5FGSeFLH3ugstc5p56gJDMPeraBcDqE", + "sharesTotal": "86592752", + "midPrice": "0.525191", + "token": { + "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", + "decimals": 18, + "symbol": "wPAX", + "tokenId": 14, + "standard": "fa2", + "thumbnailUri": "ipfs://QmZD5QDAeAUyyLYKiMmxD4vfWpVeYHctcbTkPmo4NudDHt" + } + } + ] + }, + { + "symbol": "ANTI", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 3, + "address": "KT1MsktCnwfS1nGZmf8QbaTpZ8euVijWdmkC", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "8.006870", + "tokenPool": "4775833.962000000000000000000000000000000000", + "address": "KT1FmrBGTRApgZsbUsvVKZkdTuwVsJecHSur", + "sharesTotal": "24310470", + "midPrice": "0.000002", + "token": { + "address": "KT1MsktCnwfS1nGZmf8QbaTpZ8euVijWdmkC", + "decimals": 3, + "symbol": "ANTI", + "tokenId": 0, + "standard": "fa12", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "PUMP", + "thumbnailUri": "https://i.imgur.com/EzqNw1n.png", + "tokenId": 0, + "decimals": 8, + "address": "KT1Qryr8PrH3YGcDbbddwvp8X1acQ5v2zKhA", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "1.009873", + "tokenPool": "167689103.209061140000000000000000000000000000", + "address": "KT1Rj4wyhTBrCJGXJvR8FxXgt5TpuqHEexAW", + "sharesTotal": "13476887", + "midPrice": "0.000000", + "token": { + "address": "KT1Qryr8PrH3YGcDbbddwvp8X1acQ5v2zKhA", + "decimals": 8, + "symbol": "PUMP", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.imgur.com/EzqNw1n.png" + } + } + ] + }, + { + "symbol": "WEED", + "thumbnailUri": "https://ibb.co/4j1y6dX", + "tokenId": 0, + "decimals": 8, + "address": "KT1KEsRsSMvSkgZ9CwYy5fPA1e4j3TEpuiKK", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "14.231431", + "tokenPool": "416133.344857640000000000000000000000000000", + "address": "KT1TYjt5eLHRx3nQpSfaR94oQ6vehu24vvSQ", + "sharesTotal": "105935771", + "midPrice": "0.000034", + "token": { + "address": "KT1KEsRsSMvSkgZ9CwYy5fPA1e4j3TEpuiKK", + "decimals": 8, + "symbol": "WEED", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://ibb.co/4j1y6dX" + } + } + ] + }, + { + "symbol": "UP", + "thumbnailUri": "https://upsorber.com/upsorber.png", + "tokenId": 0, + "decimals": 0, + "address": "KT1SbjD7FVSPLRVz9H6WUPnKMHXqRiU1b6A6", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.200320", + "tokenPool": "310434006.000000000000000000000000000000000000", + "address": "KT1JA1TiNQUj2fdt3T3qDUg8dh48FqjFQsfB", + "sharesTotal": "1000000", + "midPrice": "0.000000", + "token": { + "address": "KT1SbjD7FVSPLRVz9H6WUPnKMHXqRiU1b6A6", + "decimals": 0, + "symbol": "UP", + "tokenId": 0, + "standard": "fa12", + "thumbnailUri": "https://upsorber.com/upsorber.png" + } + } + ] + } + ] } -} \ No newline at end of file + } \ No newline at end of file diff --git a/Tests/KukaiCoreSwiftTests/Stubs/dipdup_dex_exchange_response_2.json b/Tests/KukaiCoreSwiftTests/Stubs/dipdup_dex_exchange_response_2.json index 20116190..1486ebd8 100644 --- a/Tests/KukaiCoreSwiftTests/Stubs/dipdup_dex_exchange_response_2.json +++ b/Tests/KukaiCoreSwiftTests/Stubs/dipdup_dex_exchange_response_2.json @@ -1,2236 +1,2522 @@ { "data": { - "token": [ - { - "symbol": "OBJKT", - "address": "KT1M2JnD1wsg7w2B4UXJXtKQPuDUpU2L7cJH", - "tokenId": 79, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "66.634500", - "tokenPool": "7276499.000000000000000000000000000000000000", - "address": "KT1A4Sj8TBg4pazMkj226bAAcH6A4iCNQno4", - "sharesTotal": "382812951", - "midPrice": "0.000009", - "token": { - "address": "KT1M2JnD1wsg7w2B4UXJXtKQPuDUpU2L7cJH", - "decimals": 0, - "symbol": "OBJKT", - "tokenId": 79, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "RADIO", - "address": "KT1NSLhBqkWbGnr6PeYwigwKzurRgUF36vas", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "66.203236", - "tokenPool": "900.976796000000000000000000000000000000", - "address": "KT1VEhYnyUpxtJPAdpAW8NZhhSzCAYFCf1oE", - "sharesTotal": "46234456", - "midPrice": "0.073479", - "token": { - "address": "KT1NSLhBqkWbGnr6PeYwigwKzurRgUF36vas", - "decimals": 6, - "symbol": "RADIO", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "SPI", - "address": "KT1CS2xKGHNPTauSh5Re4qE3N9PCfG5u4dPx", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "61.982877", - "tokenPool": "85439.408641000000000000000000000000000000", - "address": "KT1Eg2QesN1tCzScTrvoeKm5W67GgjV32McR", - "sharesTotal": "1569842700", - "midPrice": "0.000725", - "token": { - "address": "KT1CS2xKGHNPTauSh5Re4qE3N9PCfG5u4dPx", - "decimals": 6, - "symbol": "SPI", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "wFTT", - "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", - "tokenId": 6, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "59.964297", - "tokenPool": "8.444533376087217607000000000000000000", - "address": "KT1SzCtZYesqXt57qHymr3Hj37zPQT47JN6x", - "sharesTotal": "16939102", - "midPrice": "7.100960", - "token": { - "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", - "decimals": 18, - "symbol": "wFTT", - "tokenId": 6, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "RVN", - "address": "KT1JS6RrhJSbJhuYTdpUr8RA577gGrkbLj7E", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "58.330074", - "tokenPool": "1855516.177095540165484462000000000000000000", - "address": "KT1U21k5fMPxeZwj7ogASXyAwUHVT89U9X2S", - "sharesTotal": "101579547", - "midPrice": "0.000031", - "token": { - "address": "KT1JS6RrhJSbJhuYTdpUr8RA577gGrkbLj7E", - "decimals": 18, - "symbol": "RVN", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "TZLA", - "address": "KT19kRZrVKAdSUTWVjH3EneNaAAQBk1zTCrr", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "54.160854", - "tokenPool": "376722872.199800000000000000000000000000000000", - "address": "KT1Hz5yAzhfcmFn2xna18MGXoRXvuyRobxRu", - "sharesTotal": "135131362", - "midPrice": "0.000000", - "token": { - "address": "KT19kRZrVKAdSUTWVjH3EneNaAAQBk1zTCrr", - "decimals": 4, - "symbol": "TZLA", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "FMFN", - "address": "KT1RJnyqwrnzKmX9oww6A5PEum8zVvRodGBi", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "53.261334", - "tokenPool": "2974608.102637000000000000000000000000000000", - "address": "KT1CfnLgRSwJLAA8WzFhUtRnbgi46MsnZwzB", - "sharesTotal": "1227409394", - "midPrice": "0.000018", - "token": { - "address": "KT1RJnyqwrnzKmX9oww6A5PEum8zVvRodGBi", - "decimals": 6, - "symbol": "FMFN", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "GUTS", - "address": "KT1Nbc9cmx19qFrYYFpkiDoojVYL8UZJYVcj", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "3.456873", - "tokenPool": "114.000000000000000000000000000000000000", - "address": "KT1WYQj3HEt3sxdsV4dMLA8RKzUnYAzXgguS", - "sharesTotal": "21615930", - "midPrice": "0.030323", - "token": { - "address": "KT1Nbc9cmx19qFrYYFpkiDoojVYL8UZJYVcj", - "decimals": 0, - "symbol": "GUTS", - "tokenId": 0, - "standard": "fa2" - } - }, - { - "name": "quipuswap", - "tezPool": "101.857077", - "tokenPool": "3304.000000000000000000000000000000000000", - "address": "KT1GaR1CmFoTTjqRwYSE8WdpBuxuviKGbcqs", - "sharesTotal": "253744366", - "midPrice": "0.030828", - "token": { - "address": "KT1Nbc9cmx19qFrYYFpkiDoojVYL8UZJYVcj", - "decimals": 0, - "symbol": "GUTS", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "TOKENS", - "address": "KT1Gf5JGXC1M8GMji58pKraXiRLkzW2NRK1s", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "47.032715", - "tokenPool": "115413.620000000000000000000000000000000000", - "address": "KT1ANEFHasacTTZxGPmQmZo7spj5YuLE6TL4", - "sharesTotal": "10145423", - "midPrice": "0.000408", - "token": { - "address": "KT1Gf5JGXC1M8GMji58pKraXiRLkzW2NRK1s", - "decimals": 2, - "symbol": "TOKENS", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "SEX", - "address": "KT1UAE1nZQhHdPD4tZMEEqhdbQHbxZ9qh5zF", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "46.821666", - "tokenPool": "4270823988.025102000000000000000000000000000000", - "address": "KT1BqX1e5ESvdxbp1ZxjaBHscvHWVNkVxUiw", - "sharesTotal": "34354070", - "midPrice": "0.000000", - "token": { - "address": "KT1UAE1nZQhHdPD4tZMEEqhdbQHbxZ9qh5zF", - "decimals": 6, - "symbol": "SEX", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "FEM", - "address": "KT1WHhATGLXFyhmZcK9k7NWo8nw53nDiBzWQ", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "45.913041", - "tokenPool": "6482.000000000000000000000000000000000000", - "address": "KT1LtDLC8HYRi2E9vyb41AoYcmxT7N2QmpM7", - "sharesTotal": "54193749", - "midPrice": "0.007083", - "token": { - "address": "KT1WHhATGLXFyhmZcK9k7NWo8nw53nDiBzWQ", - "decimals": 0, - "symbol": "FEM", - "tokenId": 0, - "standard": "fa12" - } - } - ] - }, - { - "symbol": "NEC", - "address": "KT1J3aVe2TMBu8depgu4Xkdy8e5wV323CCzQ", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "44.892049", - "tokenPool": "17718685.886069150000000000000000000000000000", - "address": "KT1CgC7Lq4YyMK27ZCULQk4YxNxq2zyeWNy1", - "sharesTotal": "122563946", - "midPrice": "0.000003", - "token": { - "address": "KT1J3aVe2TMBu8depgu4Xkdy8e5wV323CCzQ", - "decimals": 8, - "symbol": "NEC", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "SHIHTZU", - "address": "KT1R52Gk7LzWvyV41oP9dRUbboHs4yVTXAZT", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "40.556826", - "tokenPool": "6190310.530000000000000000000000000000000000", - "address": "KT19NB2rNZ8zHULS4cGM4NgjqJJuANVVX8xq", - "sharesTotal": "50000000", - "midPrice": "0.000007", - "token": { - "address": "KT1R52Gk7LzWvyV41oP9dRUbboHs4yVTXAZT", - "decimals": 2, - "symbol": "SHIHTZU", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "wOKB", + "token": [ + { + "symbol": "tDAO", + "thumbnailUri": "https://mryamz.github.io/images/element_pics/Teddy%20Coin.png", + "tokenId": 0, + "decimals": 5, + "address": "KT1SEgjiCQYhY4frASUNEsYVTdyUbvZbrmZr", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.250207", + "tokenPool": "1.621700000000000000000000000000000000", + "address": "KT1Q79J9guKTbepaNvDy4hH9VGziXh2RPLiS", + "sharesTotal": "2198321", + "midPrice": "0.154287", + "token": { + "address": "KT1SEgjiCQYhY4frASUNEsYVTdyUbvZbrmZr", + "decimals": 5, + "symbol": "tDAO", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://mryamz.github.io/images/element_pics/Teddy%20Coin.png" + } + } + ] + }, + { + "symbol": "wWBTC", + "thumbnailUri": "ipfs://Qmdj6n9T48LDWex8NkBMKUQJfZgardxZVdtRRibYQVzLCJ", + "tokenId": 19, + "decimals": 8, + "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "18655.622533", + "tokenPool": "0.362760900000000000000000000000000000", + "address": "KT1DksKXvCBJN7Mw6frGj6y6F3CbABWZVpj1", + "sharesTotal": "7110336499", + "midPrice": "51426.773208", + "token": { "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", - "tokenId": 13, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "37.009206", - "tokenPool": "7.312929708393514137000000000000000000", - "address": "KT1NQyNPXmjYktNBDhYkBKyTGYcJSkNbYXuh", - "sharesTotal": "9110893", - "midPrice": "5.060791", - "token": { - "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", - "decimals": 18, - "symbol": "wOKB", - "tokenId": 13, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "DBL", - "address": "KT1PEe4fJWsaGDZY8Ptvc9Z9TPEV5PCFC4MQ", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "36.412823", - "tokenPool": "260133.178400000000000000000000000000000000", - "address": "KT1VBPZmW4KNLvi7CTKUuo9QQWwsPCrfR8hW", - "sharesTotal": "135898858", - "midPrice": "0.000140", - "token": { - "address": "KT1PEe4fJWsaGDZY8Ptvc9Z9TPEV5PCFC4MQ", - "decimals": 4, - "symbol": "DBL", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "KNK", - "address": "KT1NPEVemjTzFoky8VSs6N14Me79Ezu7hMCK", + "decimals": 8, + "symbol": "wWBTC", + "tokenId": 19, + "standard": "fa2", + "thumbnailUri": "ipfs://Qmdj6n9T48LDWex8NkBMKUQJfZgardxZVdtRRibYQVzLCJ" + } + } + ] + }, + { + "symbol": "TCOIN", + "thumbnailUri": "ipfs://QmdLVzCSS2QRku5ynpcghs8ccn8MjwJtrFCCmSniqoBksV", + "tokenId": 0, + "decimals": 8, + "address": "KT1GorwGk5WXLUc3sEWrmPLQBSekmYrtz1sn", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "3475.700615", + "tokenPool": "157522.698890240000000000000000000000000000", + "address": "KT1LepCZGCagf8ZnRtpHa9RBqCkqx1QCBNmn", + "sharesTotal": "2314617342", + "midPrice": "0.022065", + "token": { + "address": "KT1GorwGk5WXLUc3sEWrmPLQBSekmYrtz1sn", + "decimals": 8, + "symbol": "TCOIN", + "tokenId": 0, + "standard": "fa12", + "thumbnailUri": "ipfs://QmdLVzCSS2QRku5ynpcghs8ccn8MjwJtrFCCmSniqoBksV" + } + } + ] + }, + { + "symbol": "QNL", + "thumbnailUri": "https://ibb.co/k0KM7pb", + "tokenId": 0, + "decimals": 2, + "address": "KT1A45UMZVj4uW4BNKFc95Z9FTN6GXR1jiMf", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "4.980735", + "tokenPool": "80163.630000000000000000000000000000000000", + "address": "KT1NdkX8kzQ3QfG3bDe9TmkSVCB6zDWmi27N", + "sharesTotal": "62353583", + "midPrice": "0.000062", + "token": { + "address": "KT1A45UMZVj4uW4BNKFc95Z9FTN6GXR1jiMf", + "decimals": 2, + "symbol": "QNL", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "33.180601", - "tokenPool": "481732549.394648000000000000000000000000000000", - "address": "KT1XHCwB1aBeSBRiGHsZUBeWqTja6yKarXUz", - "sharesTotal": "30750000", - "midPrice": "0.000000", - "token": { - "address": "KT1NPEVemjTzFoky8VSs6N14Me79Ezu7hMCK", - "decimals": 6, - "symbol": "KNK", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "WEED", - "address": "KT1KEsRsSMvSkgZ9CwYy5fPA1e4j3TEpuiKK", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "30.938711", - "tokenPool": "263573.010386880000000000000000000000000000", - "address": "KT1TYjt5eLHRx3nQpSfaR94oQ6vehu24vvSQ", - "sharesTotal": "27858174", - "midPrice": "0.000117", - "token": { - "address": "KT1KEsRsSMvSkgZ9CwYy5fPA1e4j3TEpuiKK", - "decimals": 8, - "symbol": "WEED", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "BTCtz", - "address": "KT1T87QbpXEVgkwsNPzz8iRoah3SS3D1MDmh", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "30.029513", - "tokenPool": "0.002767420000000000000000000000000000", - "address": "KT1B6nXwMpGTjYjVQporXUFDQNDGnfCFsx4a", - "sharesTotal": "28779813", - "midPrice": "10851.086210", - "token": { - "address": "KT1T87QbpXEVgkwsNPzz8iRoah3SS3D1MDmh", - "decimals": 8, - "symbol": "BTCtz", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "tCow", - "address": "KT1LVnyY5cSCVpFMGXzqVsWNiSkJYA8w1rZk", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "29.713295", - "tokenPool": "3658920.060000000000000000000000000000000000", - "address": "KT1XQZxsG4pMgcN7q7Nu3XFihsb9mEvqBmAT", - "sharesTotal": "311631489", - "midPrice": "0.000008", - "token": { - "address": "KT1LVnyY5cSCVpFMGXzqVsWNiSkJYA8w1rZk", - "decimals": 2, - "symbol": "tCow", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "KRYPTO", - "address": "KT1E1jhZ7tadsDWgzrCKZzieatn4dQVXDLAk", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "28.452776", - "tokenPool": "1716076.276236440000000000000000000000000000", - "address": "KT1ELT5Bon7FZVpvEEGiQqpnxWEKAbCSky4d", - "sharesTotal": "15418599", - "midPrice": "0.000017", - "token": { - "address": "KT1E1jhZ7tadsDWgzrCKZzieatn4dQVXDLAk", - "decimals": 8, - "symbol": "KRYPTO", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "BART", - "address": "KT1T3Ly4RkMehwNpC4iWr86EV5D155bTRvce", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "28.254870", - "tokenPool": "71213594.026787885000000000000000000000000000", - "address": "KT1WJVYEjLRirPQDSWqfggjqFGn14y9hiCBL", - "sharesTotal": "2969358973", - "midPrice": "0.000000", - "token": { - "address": "KT1T3Ly4RkMehwNpC4iWr86EV5D155bTRvce", - "decimals": 9, - "symbol": "BART", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "BTC", - "address": "KT19Fd3ErPBypy4pau4Ykn2XsyKkTUCy6brt", + "standard": "fa2", + "thumbnailUri": "https://ibb.co/k0KM7pb" + } + } + ] + }, + { + "symbol": "SEB", + "thumbnailUri": "https://tzstats.com/logos/tz1R664EP6wjcM1RSUVJ7nrJisTpBW9QyJzP.png", + "tokenId": 0, + "decimals": 2, + "address": "KT1981tPmXh4KrUQKZpQKb55kREX7QGJcF3E", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "278.285976", + "tokenPool": "69280.680000000000000000000000000000000000", + "address": "KT1S4WyNiYPoYheihysddNh5hojNFdiVBwZL", + "sharesTotal": "158908566", + "midPrice": "0.004017", + "token": { + "address": "KT1981tPmXh4KrUQKZpQKb55kREX7QGJcF3E", + "decimals": 2, + "symbol": "SEB", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://tzstats.com/logos/tz1R664EP6wjcM1RSUVJ7nrJisTpBW9QyJzP.png" + } + } + ] + }, + { + "symbol": "SIRS", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 0, + "address": "KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1KYTrdDJ54U2nUCBcnGZScBqJeaoheXb9P", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo", + "decimals": 0, + "symbol": "SIRS", + "tokenId": 0, + "standard": "fa12", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "H2O", + "thumbnailUri": "https://ibb.co/w6MFxz2", + "tokenId": 0, + "decimals": 6, + "address": "KT1NiwXj3cMPcHHgJbA2Aeuvjx1FE6THV7d5", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "4.502281", + "tokenPool": "1045768.657134000000000000000000000000000000", + "address": "KT1NeBbCRpN9hYzToVMFMVVdDoqGHXDK7sNX", + "sharesTotal": "2146258", + "midPrice": "0.000004", + "token": { + "address": "KT1NiwXj3cMPcHHgJbA2Aeuvjx1FE6THV7d5", + "decimals": 6, + "symbol": "H2O", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "27.962406", - "tokenPool": "953332.207616000000000000000000000000000000", - "address": "KT1E9tnrFzLiU3o8vo5GsSwyEHg7i9BYX24j", - "sharesTotal": "50909103", - "midPrice": "0.000029", - "token": { - "address": "KT19Fd3ErPBypy4pau4Ykn2XsyKkTUCy6brt", - "decimals": 6, - "symbol": "BTC", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "DONTz", - "address": "KT1T9kFJD5fKAT4LAZWjYBCaWNbD7cw1CUju", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "25.414961", - "tokenPool": "653500.540000000000000000000000000000000000", - "address": "KT1FaPEfr2hGTR1d4tN9VikubuSVS1CuuMJX", - "sharesTotal": "12714113", - "midPrice": "0.000039", - "token": { - "address": "KT1T9kFJD5fKAT4LAZWjYBCaWNbD7cw1CUju", - "decimals": 2, - "symbol": "DONTz", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "QLkUSD", - "address": "KT1AxaBxkFLCUi3f8rdDAAxBKHfzY8LfKDRA", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "25.193823", - "tokenPool": "912.862337683141191839328881654820885868", - "address": "KT1WtFb1mTsFRd1n1nAYMdrE2Ud9XREz5hjK", - "sharesTotal": "62800589", - "midPrice": "0.027599", - "token": { - "address": "KT1AxaBxkFLCUi3f8rdDAAxBKHfzY8LfKDRA", - "decimals": 36, - "symbol": "QLkUSD", - "tokenId": 0, - "standard": "fa12" - } - } - ] - }, - { - "symbol": "FUCKS", - "address": "KT1GhX6MzTHKcjkMTg1mwCPzam12HRjsp6Sf", + "standard": "fa2", + "thumbnailUri": "https://ibb.co/w6MFxz2" + } + } + ] + }, + { + "symbol": "CUU", + "thumbnailUri": "https://i.ibb.co/F0sggDd/YPoYZuS.jpg", + "tokenId": 0, + "decimals": 2, + "address": "KT18jLqWNnbYeA2593macdnbc6tkaaudH5fh", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1W1hafYEzQkQLXyRPTxMeG3UaoUSsW7wNR", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT18jLqWNnbYeA2593macdnbc6tkaaudH5fh", + "decimals": 2, + "symbol": "CUU", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.ibb.co/F0sggDd/YPoYZuS.jpg" + } + } + ] + }, + { + "symbol": "KET", + "thumbnailUri": "https://i.imgur.com/57bZtKW.jpg", + "tokenId": 0, + "decimals": 3, + "address": "KT1FS8SLepEpUaMECyVR1wwkpHYRrYhXBKsa", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "17.981726", + "tokenPool": "46475786.952000000000000000000000000000000000", + "address": "KT1TJYvsyiaCKn9rTccn8JDSfxDWJttR5bgp", + "sharesTotal": "215418157", + "midPrice": "0.000000", + "token": { + "address": "KT1FS8SLepEpUaMECyVR1wwkpHYRrYhXBKsa", + "decimals": 3, + "symbol": "KET", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "24.885037", - "tokenPool": "437.380000000000000000000000000000000000", - "address": "KT1FjyTrWzCqszpPanj1inzDm4nRnW6AJf4U", - "sharesTotal": "10386637", - "midPrice": "0.056896", - "token": { - "address": "KT1GhX6MzTHKcjkMTg1mwCPzam12HRjsp6Sf", - "decimals": 2, - "symbol": "FUCKS", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "LEOS", - "address": "KT1WSjYwMH22f2ZD2v7enuaJ3EUHW7XVAJBp", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "24.445048", - "tokenPool": "14746.530000000000000000000000000000000000", - "address": "KT1UEDzVv2hzTygNWuojUxfEqeVrf5fL5uPK", - "sharesTotal": "18870726", - "midPrice": "0.001658", - "token": { - "address": "KT1WSjYwMH22f2ZD2v7enuaJ3EUHW7XVAJBp", - "decimals": 2, - "symbol": "LEOS", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "THANK", - "address": "KT1FR9ij18K3dDExgFMBs7ppxfdGYzHiPo7c", + "standard": "fa2", + "thumbnailUri": "https://i.imgur.com/57bZtKW.jpg" + } + } + ] + }, + { + "symbol": "HSK", + "thumbnailUri": "https://i.ibb.co/M2fxvDC/unnamed.jpg", + "tokenId": 0, + "decimals": 2, + "address": "KT1ACFCHun5GvukxDQq3KpMPXLr9QgnqvFvd", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT19HJTgEqnmi1cYyq8z2WFtyNTECodfixmj", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1ACFCHun5GvukxDQq3KpMPXLr9QgnqvFvd", + "decimals": 2, + "symbol": "HSK", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.ibb.co/M2fxvDC/unnamed.jpg" + } + } + ] + }, + { + "symbol": "ASADA", + "thumbnailUri": "https://ipfs.io/ipfs/QmTeDaUsBFujKVEdxNu8iCEnrkYeuoEa6yFXkAmLj2NhtV", + "tokenId": 0, + "decimals": 6, + "address": "KT1TCPf4DjgsseHj8ixRnCBgToqZbdFHQtPA", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.572448", + "tokenPool": "480698371.257230000000000000000000000000000000", + "address": "KT1GesE2kX6QcPF5bxyvGHW7fhDGYU6aKi7w", + "sharesTotal": "130602070", + "midPrice": "0.000000", + "token": { + "address": "KT1TCPf4DjgsseHj8ixRnCBgToqZbdFHQtPA", + "decimals": 6, + "symbol": "ASADA", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "21.575928", - "tokenPool": "1563.430000000000000000000000000000000000", - "address": "KT1UB7qgywfrntdTnvFCUgw7QxjRhiKWMnCa", - "sharesTotal": "18177989", - "midPrice": "0.013800", - "token": { - "address": "KT1FR9ij18K3dDExgFMBs7ppxfdGYzHiPo7c", - "decimals": 2, - "symbol": "THANK", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "RTQLA", - "address": "KT1QHcRL3FZRpQruFkb1GBYwfqoPXTFGipRH", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "20.312630", - "tokenPool": "54.500372000000000000000000000000000000", - "address": "KT1CASqMygFhCwa8LFQwNhRTJHmqvbbyXyCc", - "sharesTotal": "0", - "midPrice": "0.372706", - "token": { - "address": "KT1QHcRL3FZRpQruFkb1GBYwfqoPXTFGipRH", - "decimals": 6, - "symbol": "RTQLA", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "DARK", - "address": "KT1CYyafaf8FybXzny7VZK93tfktVSw1N3Rd", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "20.289911", - "tokenPool": "9.160510660000000000000000000000000000", - "address": "KT1UUbdvhUXW9j7oRbQdQHnPCFisn4qv19BK", - "sharesTotal": "33377603", - "midPrice": "2.214932", - "token": { - "address": "KT1CYyafaf8FybXzny7VZK93tfktVSw1N3Rd", - "decimals": 8, - "symbol": "DARK", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "WEED", - "address": "KT1VX7wfHgmXPgemsagY8UxNSPv5fKxvUSYK", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "19.660959", - "tokenPool": "404913.345683840000000000000000000000000000", - "address": "KT1VEKgCCYCudjfvLZaEh4havFiJMmxMgNdX", - "sharesTotal": "122993224", - "midPrice": "0.000049", - "token": { - "address": "KT1VX7wfHgmXPgemsagY8UxNSPv5fKxvUSYK", - "decimals": 8, - "symbol": "WEED", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "FKB", - "address": "KT1E6C7WkwG8GWnPBBJJDMADrYuuYaK7ddmM", + "standard": "fa2", + "thumbnailUri": "https://ipfs.io/ipfs/QmTeDaUsBFujKVEdxNu8iCEnrkYeuoEa6yFXkAmLj2NhtV" + } + } + ] + }, + { + "symbol": "TITz", + "thumbnailUri": "https://ibb.co/KXT49FK", + "tokenId": 0, + "decimals": 2, + "address": "KT1AGhcM4GAEo2obsFjuEERcGkURdDFUW86h", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "1.413471", + "tokenPool": "149792.580000000000000000000000000000000000", + "address": "KT1BNRefGboWR4p2SFwDDTosjnPKPL9hVk3q", + "sharesTotal": "1811490", + "midPrice": "0.000009", + "token": { + "address": "KT1AGhcM4GAEo2obsFjuEERcGkURdDFUW86h", + "decimals": 2, + "symbol": "TITz", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://ibb.co/KXT49FK" + } + } + ] + }, + { + "symbol": "CERVEZA", + "thumbnailUri": "https://ipfs.io/ipfs/QmXxGpokiUaUrCiv6jBoMLikLSNTxw3yDsHEKVPhdXrM6J", + "tokenId": 0, + "decimals": 6, + "address": "KT1AJkR5vBbEHUbSEEGHaFMQm1puTBm5an5T", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "1.562062", + "tokenPool": "39533.580959000000000000000000000000000000", + "address": "KT1XqWG7VS4MkEuCpJNyobGQkN8L3uvf5gUB", + "sharesTotal": "168761972", + "midPrice": "0.000040", + "token": { + "address": "KT1AJkR5vBbEHUbSEEGHaFMQm1puTBm5an5T", + "decimals": 6, + "symbol": "CERVEZA", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "19.651056", - "tokenPool": "4692135879.239993000000000000000000000000000000", - "address": "KT1UyqBg82dWGBCyFbRD8J96Ud6diYLkt8Ca", - "sharesTotal": "412293160", - "midPrice": "0.000000", - "token": { - "address": "KT1E6C7WkwG8GWnPBBJJDMADrYuuYaK7ddmM", - "decimals": 6, - "symbol": "FKB", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "SHL", - "address": "KT1X5okZZpcUvqFZ2r7GA8rRifrSzYrCky8P", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "18.722729", - "tokenPool": "729732823.297059000000000000000000000000000000", - "address": "KT1S1AkQeYMsw4V7d9gPj9rxCPuht4QwSCLe", - "sharesTotal": "956724306", - "midPrice": "0.000000", - "token": { - "address": "KT1X5okZZpcUvqFZ2r7GA8rRifrSzYrCky8P", - "decimals": 6, - "symbol": "SHL", - "tokenId": 0, - "standard": "fa12" - } - } - ] - }, - { - "symbol": "STAR", - "address": "KT1FTZUisdS5Sg7GS2g4QJWHXKaJjm42TBHz", + "standard": "fa2", + "thumbnailUri": "https://ipfs.io/ipfs/QmXxGpokiUaUrCiv6jBoMLikLSNTxw3yDsHEKVPhdXrM6J" + } + } + ] + }, + { + "symbol": "F15H", + "thumbnailUri": "https://i.ibb.co/Zhv6Tng/F15H.jpg", + "tokenId": 0, + "decimals": 2, + "address": "KT1GorbQ7ZKetuCRQZrpgDq3QW1KAtqhzytk", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "4.062231", + "tokenPool": "3910259.200000000000000000000000000000000000", + "address": "KT1CNEgfKrGWtYdWAGG3cyZAUcFFpotmAme9", + "sharesTotal": "3938007", + "midPrice": "0.000001", + "token": { + "address": "KT1GorbQ7ZKetuCRQZrpgDq3QW1KAtqhzytk", + "decimals": 2, + "symbol": "F15H", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "18.591561", - "tokenPool": "62693.429662000000000000000000000000000000", - "address": "KT1JCvbKL2fkojHw9ZFAxc1xLVa31ZP1s3Gz", - "sharesTotal": "102681461", - "midPrice": "0.000297", - "token": { - "address": "KT1FTZUisdS5Sg7GS2g4QJWHXKaJjm42TBHz", - "decimals": 6, - "symbol": "STAR", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { + "standard": "fa2", + "thumbnailUri": "https://i.ibb.co/Zhv6Tng/F15H.jpg" + } + } + ] + }, + { + "symbol": "KET", + "thumbnailUri": "https://i.imgur.com/57bZtKW.jpg", + "tokenId": 0, + "decimals": 3, + "address": "KT1E51BdAf8bQYreGPeGbHH3HQ5DXvVBsEB3", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT19qvQUYmcpWTN6oNnAwgfrHYVKoGgyoQZ5", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1E51BdAf8bQYreGPeGbHH3HQ5DXvVBsEB3", + "decimals": 3, "symbol": "KET", - "address": "KT1FS8SLepEpUaMECyVR1wwkpHYRrYhXBKsa", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "18.423816", - "tokenPool": "46368009.739000000000000000000000000000000000", - "address": "KT1TJYvsyiaCKn9rTccn8JDSfxDWJttR5bgp", - "sharesTotal": "217801561", - "midPrice": "0.000000", - "token": { - "address": "KT1FS8SLepEpUaMECyVR1wwkpHYRrYhXBKsa", - "decimals": 3, - "symbol": "KET", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "LTC", - "address": "KT1EWcmtZEps6EgVDp1hxsTo5aEtCT4Zs44T", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "17.407805", - "tokenPool": "18088747.753163000000000000000000000000000000", - "address": "KT18kRMKXKWyVzjDsdi6GDWQj4KM64NQiRv3", - "sharesTotal": "12263048", - "midPrice": "0.000001", - "token": { - "address": "KT1EWcmtZEps6EgVDp1hxsTo5aEtCT4Zs44T", - "decimals": 6, - "symbol": "LTC", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "REDK", - "address": "KT1QVHqdwbi5qfSUGPApgce9gxoo9JxpAx4k", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "17.145968", - "tokenPool": "754231.205245900000000000000000000000000000", - "address": "KT1DmVZ3fNESMFcbnzbSaRNV16vjvb4a988b", - "sharesTotal": "3556787", - "midPrice": "0.000023", - "token": { - "address": "KT1QVHqdwbi5qfSUGPApgce9gxoo9JxpAx4k", - "decimals": 8, - "symbol": "REDK", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "wHT", - "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", - "tokenId": 7, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "14.994210", - "tokenPool": "8.589604518351794912000000000000000000", - "address": "KT1GsTjbWkTgtsWenM6oWuTuft3Qb46p2x4c", - "sharesTotal": "6773258", - "midPrice": "1.745623", - "token": { - "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", - "decimals": 18, - "symbol": "wHT", - "tokenId": 7, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "XI", - "address": "KT1PFzYyXZhYXHKoznXL1y39dLmQ7KbaR3JM", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "14.305701", - "tokenPool": "199630.613498000000000000000000000000000000", - "address": "KT1PmYoCF5FkiL6GxZfgWZSV4W7R7HU6Xnnd", - "sharesTotal": "167407899", - "midPrice": "0.000072", - "token": { - "address": "KT1PFzYyXZhYXHKoznXL1y39dLmQ7KbaR3JM", - "decimals": 6, - "symbol": "XI", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "MILK", - "address": "KT1EBpRMdK98rPpaXqJeW4822WAdwXYNL64d", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "13.840185", - "tokenPool": "330840429.500834640000000000000000000000000000", - "address": "KT1LLxJJpceTFHin2atm3e2TY4Kj5mJCgzSR", - "sharesTotal": "212234358", - "midPrice": "0.000000", - "token": { - "address": "KT1EBpRMdK98rPpaXqJeW4822WAdwXYNL64d", - "decimals": 8, - "symbol": "MILK", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "HUNC", - "address": "KT1Vbrnm5HHc1j6ePoxJWyY92cxgVLkMUi9Y", + "standard": "fa2", + "thumbnailUri": "https://i.imgur.com/57bZtKW.jpg" + } + } + ] + }, + { + "symbol": "FLAME", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 6, + "address": "KT1Wa8yqRBpFCusJWgcQyjhRz7hUQAmFxW7j", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "1613.906934", + "tokenPool": "206477395.876093000000000000000000000000000000", + "address": "KT1Q93ftAUzvfMGPwC78nX8eouL1VzmHPd4d", + "sharesTotal": "20206911678", + "midPrice": "0.000008", + "token": { + "address": "KT1Wa8yqRBpFCusJWgcQyjhRz7hUQAmFxW7j", + "decimals": 6, + "symbol": "FLAME", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "RICE", + "thumbnailUri": "https://uxwing.com/wp-content/themes/uxwing/download/20-food-and-drinks/rice.png", + "tokenId": 0, + "decimals": 2, + "address": "KT1Wa2ncR8GbeQrW6Dbtpc8uTrK7q5CH4F2Q", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "1.735445", + "tokenPool": "22495199128.330000000000000000000000000000000000", + "address": "KT19Koy81QJLtghfSsDMLTmwj9myESNTbUaS", + "sharesTotal": "123046206", + "midPrice": "0.000000", + "token": { + "address": "KT1Wa2ncR8GbeQrW6Dbtpc8uTrK7q5CH4F2Q", + "decimals": 2, + "symbol": "RICE", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "13.437007", - "tokenPool": "10825.800000000000000000000000000000000000", - "address": "KT1Ji39TrkVBd6L2SL7H4u9yvA1sPuSygthq", - "sharesTotal": "11923041", - "midPrice": "0.001241", - "token": { - "address": "KT1Vbrnm5HHc1j6ePoxJWyY92cxgVLkMUi9Y", - "decimals": 2, - "symbol": "HUNC", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "Dog", - "address": "KT1MTKDXgAHrbA22MJuHiBRU6r8eUkuvfdRD", + "standard": "fa2", + "thumbnailUri": "https://uxwing.com/wp-content/themes/uxwing/download/20-food-and-drinks/rice.png" + } + } + ] + }, + { + "symbol": "BRR", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 6, + "address": "KT1UHNDNjrCAAiRbzZrtQF9qHSHVMYeJyX1y", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "32.962414", + "tokenPool": "267335487.406204000000000000000000000000000000", + "address": "KT1PmH3JCEo65koqSGGUArKSpbKMN8dJ3BPZ", + "sharesTotal": "88936854", + "midPrice": "0.000000", + "token": { + "address": "KT1UHNDNjrCAAiRbzZrtQF9qHSHVMYeJyX1y", + "decimals": 6, + "symbol": "BRR", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "BOLLA", + "thumbnailUri": "https://static.thenounproject.com/png/26154-200.png", + "tokenId": 0, + "decimals": 6, + "address": "KT196ZiPqPTZDsWpWvuhgZUrYK5x8WxYz3wb", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "2.059385", + "tokenPool": "2406298437.675224000000000000000000000000000000", + "address": "KT1Qt8bLFWbTiJ7DChQooBmab1MMHTx9uo8U", + "sharesTotal": "21178318322", + "midPrice": "0.000000", + "token": { + "address": "KT196ZiPqPTZDsWpWvuhgZUrYK5x8WxYz3wb", + "decimals": 6, + "symbol": "BOLLA", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "12.718723", - "tokenPool": "51824.481253441338863000000000000000000000", - "address": "KT1WMJ73rHAxqJXh8iMefeMQ5A32zUaaognt", - "sharesTotal": "10000000", - "midPrice": "0.000245", - "token": { - "address": "KT1MTKDXgAHrbA22MJuHiBRU6r8eUkuvfdRD", - "decimals": 15, - "symbol": "Dog", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "TZS", - "address": "KT1XRxmUFNcbzGTwQPvNPa5FuuM43uEunp8K", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "12.511237", - "tokenPool": "29310.000000000000000000000000000000000000", - "address": "KT1A834QfnWremTQ4tc63s8NKbHzLJVszgxc", - "sharesTotal": "20509288", - "midPrice": "0.000427", - "token": { - "address": "KT1XRxmUFNcbzGTwQPvNPa5FuuM43uEunp8K", - "decimals": 0, - "symbol": "TZS", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "TILLA", - "address": "KT1K7vvj7bQAY7YqCRnvrddoSaLp9tbJLn8Y", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "11.518657", - "tokenPool": "511237453.600893000000000000000000000000000000", - "address": "KT1WtgJSktmmUyAvYbC7YCiQ73xKN6NBH5zc", - "sharesTotal": "75702123", - "midPrice": "0.000000", - "token": { - "address": "KT1K7vvj7bQAY7YqCRnvrddoSaLp9tbJLn8Y", - "decimals": 6, - "symbol": "TILLA", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "boofs", - "address": "KT18cH4erroRjVTyV3k8UzTpjey8m1NjFYae", + "standard": "fa2", + "thumbnailUri": "https://static.thenounproject.com/png/26154-200.png" + } + } + ] + }, + { + "symbol": "BEEF", + "thumbnailUri": "https://www.pngfind.com/pngs/m/173-1730620_beef-clipart-rare-meat-meat-icon-png-transparent.png", + "tokenId": 0, + "decimals": 6, + "address": "KT1M2Ws52krJrwJi1ZFsmVfazBiafWYKZTvd", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "33.237887", + "tokenPool": "1202357243.179555000000000000000000000000000000", + "address": "KT1BtmMAnmTGHAA9ZV8xPzuwZu4ibL7f5qb3", + "sharesTotal": "830528860", + "midPrice": "0.000000", + "token": { + "address": "KT1M2Ws52krJrwJi1ZFsmVfazBiafWYKZTvd", + "decimals": 6, + "symbol": "BEEF", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://www.pngfind.com/pngs/m/173-1730620_beef-clipart-rare-meat-meat-icon-png-transparent.png" + } + } + ] + }, + { + "symbol": "HERA", + "thumbnailUri": "https://heranetwork.co/icons/ic_coin.svg", + "tokenId": 0, + "decimals": 3, + "address": "KT1JXxK3bd39ayLiiBdKm2cdReYnVSG3bkzK", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "91.862560", + "tokenPool": "7227566.332000000000000000000000000000000000", + "address": "KT1DgbAE84xno2wdaEgeYpZkFZMs5fskAgP7", + "sharesTotal": "1936984641", + "midPrice": "0.000013", + "token": { + "address": "KT1JXxK3bd39ayLiiBdKm2cdReYnVSG3bkzK", + "decimals": 3, + "symbol": "HERA", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://heranetwork.co/icons/ic_coin.svg" + } + } + ] + }, + { + "symbol": "RTT", + "thumbnailUri": "https://i.imgur.com/zNalRBN.jpg", + "tokenId": 0, + "decimals": 2, + "address": "KT1JG7MKVa2Pba2Q2VwB2TZLY9ZTKh9csC1E", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.098597", + "tokenPool": "2198.540000000000000000000000000000000000", + "address": "KT1QoKSXVnvytnkbMLu8Nqh9vH9qPdtvxR6K", + "sharesTotal": "45617", + "midPrice": "0.000045", + "token": { + "address": "KT1JG7MKVa2Pba2Q2VwB2TZLY9ZTKh9csC1E", + "decimals": 2, + "symbol": "RTT", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "11.309440", - "tokenPool": "56582923628.110000000000000000000000000000000000", - "address": "KT1F2uvnfdN6GYKhhCDfb1kt5h9TaeXAbVeh", - "sharesTotal": "1442906", - "midPrice": "0.000000", - "token": { - "address": "KT18cH4erroRjVTyV3k8UzTpjey8m1NjFYae", - "decimals": 2, - "symbol": "boofs", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "ALIEN", - "address": "KT1GbJNS7XrRdJWgFdaXR1NUqf9icKNA8ecv", + "standard": "fa2", + "thumbnailUri": "https://i.imgur.com/zNalRBN.jpg" + } + } + ] + }, + { + "symbol": "thcSEEDs", + "thumbnailUri": "https://i.ibb.co/j8TzjLq/thc-SEEDsv2.png", + "tokenId": 0, + "decimals": 4, + "address": "KT1NviVpi1V6ZxVMhSsTcHHaNdK2YjSQRWc8", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.561475", + "tokenPool": "82002591.185100000000000000000000000000000000", + "address": "KT1KHAy21tZTsG9TXVafEVfUgTqeLqg7Lc7M", + "sharesTotal": "6686490", + "midPrice": "0.000000", + "token": { + "address": "KT1NviVpi1V6ZxVMhSsTcHHaNdK2YjSQRWc8", + "decimals": 4, + "symbol": "thcSEEDs", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.ibb.co/j8TzjLq/thc-SEEDsv2.png" + } + } + ] + }, + { + "symbol": "boofs", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 2, + "address": "KT18cH4erroRjVTyV3k8UzTpjey8m1NjFYae", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "11.329401", + "tokenPool": "56582805515.940000000000000000000000000000000000", + "address": "KT1F2uvnfdN6GYKhhCDfb1kt5h9TaeXAbVeh", + "sharesTotal": "1444175", + "midPrice": "0.000000", + "token": { + "address": "KT18cH4erroRjVTyV3k8UzTpjey8m1NjFYae", + "decimals": 2, + "symbol": "boofs", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "10.441589", - "tokenPool": "2742453.394557000000000000000000000000000000", - "address": "KT1NXBYPKKmVbEJer8Jk4fZ3Q7WaLGY58CmH", - "sharesTotal": "6645032", - "midPrice": "0.000004", - "token": { - "address": "KT1GbJNS7XrRdJWgFdaXR1NUqf9icKNA8ecv", - "decimals": 6, - "symbol": "ALIEN", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "TZ10X", - "address": "KT1FuZXfq3K52hodz1qmoNBEUTz7WMeP2Twh", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "10.025523", - "tokenPool": "0.998012000000000000000000000000000000", - "address": "KT1REvevPU2jnjtvoXLdAa3yJQ3wxhzNSBDS", - "sharesTotal": "10000000", - "midPrice": "10.045493", - "token": { - "address": "KT1FuZXfq3K52hodz1qmoNBEUTz7WMeP2Twh", - "decimals": 6, - "symbol": "TZ10X", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "RUM", - "address": "KT1B1TBVgvenRKG2UJnwSgeNbZdVM6yumiVJ", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "9.810367", - "tokenPool": "2119.987917750000000000000000000000000000", - "address": "KT1JZvv1ivDu6P7W78kZ57ESUxLRnayHsxgq", - "sharesTotal": "9041451", - "midPrice": "0.004628", - "token": { - "address": "KT1B1TBVgvenRKG2UJnwSgeNbZdVM6yumiVJ", - "decimals": 8, - "symbol": "RUM", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "rkDAO", - "address": "KT1MuyJ7gVw74FNJpfb2mHR15aCREdyEbe2e", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "9.764042", - "tokenPool": "49.542171450000000000000000000000000000", - "address": "KT1ANY7962FTf2RqJMMF4paZkuTQA77994yv", - "sharesTotal": "35826890", - "midPrice": "0.197085", - "token": { - "address": "KT1MuyJ7gVw74FNJpfb2mHR15aCREdyEbe2e", - "decimals": 8, - "symbol": "rkDAO", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "wMKR", - "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", - "tokenId": 12, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "8.778427", - "tokenPool": "0.017750545371309084000000000000000000", - "address": "KT1MaefGJRtu57DiVhQNEjYgTYok3X71iEDj", - "sharesTotal": "2549568", - "midPrice": "494.544073", - "token": { - "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", - "decimals": 18, - "symbol": "wMKR", - "tokenId": 12, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "CORN", - "address": "KT1VSfiXojPodWiZtSfaTooiKKsPAafJdJGa", + "standard": "fa2", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "CANDY", + "thumbnailUri": "https://freesvg.org/storage/img/thumb/maweki-Nimm2-type-candy.png", + "tokenId": 0, + "decimals": 0, + "address": "KT1TCnvvCjBuZpyKPUGXJd6QRrvupfsJZRUr", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1JEscpJffPqepPvShDJ93DPK8Ez9Cvt7Xi", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1TCnvvCjBuZpyKPUGXJd6QRrvupfsJZRUr", + "decimals": 0, + "symbol": "CANDY", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://freesvg.org/storage/img/thumb/maweki-Nimm2-type-candy.png" + } + } + ] + }, + { + "symbol": "Chunk", + "thumbnailUri": "https://cloudflare-ipfs.com/ipfs/QmWvH2fKhAvM1tguBP8nucbsHpZdGEdCwU33U6ZgQQT88V", + "tokenId": 0, + "decimals": 8, + "address": "KT1Az4udnGnJTaGfU4X3oYqKoJ2tQUMBDPSt", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "1.514491", + "tokenPool": "668630.174964660000000000000000000000000000", + "address": "KT1DiGxvRshVMn2p1KRfew6fnP9hpHT212MX", + "sharesTotal": "1000000", + "midPrice": "0.000002", + "token": { + "address": "KT1Az4udnGnJTaGfU4X3oYqKoJ2tQUMBDPSt", + "decimals": 8, + "symbol": "Chunk", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://cloudflare-ipfs.com/ipfs/QmWvH2fKhAvM1tguBP8nucbsHpZdGEdCwU33U6ZgQQT88V" + } + } + ] + }, + { + "symbol": "WHEAT", + "thumbnailUri": "https://ipfs.io/ipfs/QmbkBaScs4qoKhhS4UAL4mKHjDuAi3PGoJ8k5RNgCcTu9J", + "tokenId": 0, + "decimals": 6, + "address": "KT1DgP4K39T1Wqqax9YZuwnkstnY1gNtqcri", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "7.103496", + "tokenPool": "9661453889.358386000000000000000000000000000000", + "address": "KT1DZuoqhhA6rcViB4seqDbjYDgr3UfCFNt3", + "sharesTotal": "572652044", + "midPrice": "0.000000", + "token": { + "address": "KT1DgP4K39T1Wqqax9YZuwnkstnY1gNtqcri", + "decimals": 6, + "symbol": "WHEAT", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://ipfs.io/ipfs/QmbkBaScs4qoKhhS4UAL4mKHjDuAi3PGoJ8k5RNgCcTu9J" + } + } + ] + }, + { + "symbol": "tChicken", + "thumbnailUri": "https://i.imgur.com/tJw9Cer.png", + "tokenId": 0, + "decimals": 6, + "address": "KT1QoDjTpkG9jmAMwrPCsaRR78xHDcRKydBp", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "102.296135", + "tokenPool": "109071002.716974000000000000000000000000000000", + "address": "KT1JzZtBeHDBS9XyEqUc9nZhsqcfeNLxVV1T", + "sharesTotal": "147358871", + "midPrice": "0.000001", + "token": { + "address": "KT1QoDjTpkG9jmAMwrPCsaRR78xHDcRKydBp", + "decimals": 6, + "symbol": "tChicken", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.imgur.com/tJw9Cer.png" + } + } + ] + }, + { + "symbol": "hrDAO", + "thumbnailUri": "https://heranetwork.co/icons/ic_coin_dao.jpg", + "tokenId": 0, + "decimals": 6, + "address": "KT1ExpspQSag2x5dATrBxEQzrHP5PJd28fA4", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "41.122424", + "tokenPool": "3748.626934000000000000000000000000000000", + "address": "KT1PiXcVdqgsaYnkQ7KAec9skLRMtmDcsnMy", + "sharesTotal": "1162244070", + "midPrice": "0.010970", + "token": { + "address": "KT1ExpspQSag2x5dATrBxEQzrHP5PJd28fA4", + "decimals": 6, + "symbol": "hrDAO", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://heranetwork.co/icons/ic_coin_dao.jpg" + } + } + ] + }, + { + "symbol": "TACOS", + "thumbnailUri": "https://ipfs.io/ipfs/QmRTWJ57ytvM4USQRtUC1ujXAncMJNUrUAMsFqjEKhKmcb/", + "tokenId": 0, + "decimals": 2, + "address": "KT1TxyzQh7AqVHjjnPAAakuBwiCaWvVLp2pT", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.582985", + "tokenPool": "1298244.460000000000000000000000000000000000", + "address": "KT1ERtmznJQj4JpX7q6dN3JLJXaDTnZkD7e4", + "sharesTotal": "2646426", + "midPrice": "0.000000", + "token": { + "address": "KT1TxyzQh7AqVHjjnPAAakuBwiCaWvVLp2pT", + "decimals": 2, + "symbol": "TACOS", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://ipfs.io/ipfs/QmRTWJ57ytvM4USQRtUC1ujXAncMJNUrUAMsFqjEKhKmcb/" + } + } + ] + }, + { + "symbol": "LOLI", + "thumbnailUri": "https://cdn.discordapp.com/attachments/857748345460228119/857748385964883978/519c08afdfbfd.png", + "tokenId": 0, + "decimals": 0, + "address": "KT1UyhoWg6nTuHeTCJme6okxWzgUY4eJrLb9", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1Hn6ukPY6rj8VqZ84a9rGjkNb34Wzd58QW", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1UyhoWg6nTuHeTCJme6okxWzgUY4eJrLb9", + "decimals": 0, + "symbol": "LOLI", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://cdn.discordapp.com/attachments/857748345460228119/857748385964883978/519c08afdfbfd.png" + } + } + ] + }, + { + "symbol": "chunc", + "thumbnailUri": "https://cloudflare-ipfs.com/ipfs/QmfEbirSA7indrEzjFAtJ589oChBFrqLio9kwpJwR4ttHx", + "tokenId": 0, + "decimals": 7, + "address": "KT1ELJHUaJsDk9cvXcKESMKW9sXFNrRLohxG", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "1.364211", + "tokenPool": "735672.756682800000000000000000000000000000", + "address": "KT1LXkyMvjuTk2ugEA7UsRmEWHautLH147ez", + "sharesTotal": "1000000", + "midPrice": "0.000002", + "token": { + "address": "KT1ELJHUaJsDk9cvXcKESMKW9sXFNrRLohxG", + "decimals": 7, + "symbol": "chunc", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://cloudflare-ipfs.com/ipfs/QmfEbirSA7indrEzjFAtJ589oChBFrqLio9kwpJwR4ttHx" + } + } + ] + }, + { + "symbol": "AVO", + "thumbnailUri": "https://ipfs.io/ipfs/QmPkozoWkxeGsWw5P3Qvw33fFzaHmKzURED5BV8NzNJSN1", + "tokenId": 0, + "decimals": 6, + "address": "KT18k2r2n87iRLC38k8ogoZL2uLx2WrvGA1v", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "20.858718", + "tokenPool": "168693597.524840000000000000000000000000000000", + "address": "KT1Cj8DKpSimWLD8JLxAgxhfuNjTH7fheTJj", + "sharesTotal": "57867926", + "midPrice": "0.000000", + "token": { + "address": "KT18k2r2n87iRLC38k8ogoZL2uLx2WrvGA1v", + "decimals": 6, + "symbol": "AVO", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://ipfs.io/ipfs/QmPkozoWkxeGsWw5P3Qvw33fFzaHmKzURED5BV8NzNJSN1" + } + } + ] + }, + { + "symbol": "Bezos", + "thumbnailUri": "https://cloudflare-ipfs.com/ipfs/QmfEbirSA7indrEzjFAtJ589oChBFrqLio9kwpJwR4ttHx", + "tokenId": 0, + "decimals": 7, + "address": "KT1Ai2uHzf1aj5ukdwbyL82jQV4JVdFtT3nY", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "1.112983", + "tokenPool": "900001.451132600000000000000000000000000000", + "address": "KT1UM7LbQuZ5e26RgJ97aRLJ3ymmBUq8zjmB", + "sharesTotal": "1000000", + "midPrice": "0.000001", + "token": { + "address": "KT1Ai2uHzf1aj5ukdwbyL82jQV4JVdFtT3nY", + "decimals": 7, + "symbol": "Bezos", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://cloudflare-ipfs.com/ipfs/QmfEbirSA7indrEzjFAtJ589oChBFrqLio9kwpJwR4ttHx" + } + } + ] + }, + { + "symbol": "THANK", + "thumbnailUri": "https://upload.wikimedia.org/wikipedia/commons/thumb/e/e0/SNice.svg/220px-SNice.svg.png", + "tokenId": 0, + "decimals": 2, + "address": "KT1FR9ij18K3dDExgFMBs7ppxfdGYzHiPo7c", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "4.370648", + "tokenPool": "2890.250000000000000000000000000000000000", + "address": "KT1UB7qgywfrntdTnvFCUgw7QxjRhiKWMnCa", + "sharesTotal": "11108426", + "midPrice": "0.001512", + "token": { + "address": "KT1FR9ij18K3dDExgFMBs7ppxfdGYzHiPo7c", + "decimals": 2, + "symbol": "THANK", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "8.696240", - "tokenPool": "1123842554.730205000000000000000000000000000000", - "address": "KT1Pp5rSkM4jc4LZ41VtHdtUCaRHq5HUj6wq", - "sharesTotal": "10236491", - "midPrice": "0.000000", - "token": { - "address": "KT1VSfiXojPodWiZtSfaTooiKKsPAafJdJGa", - "decimals": 6, - "symbol": "CORN", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "GHST", - "address": "KT1GMM54j7d8chfEitzUNJ2rrsA9Rs1zGBmK", + "standard": "fa2", + "thumbnailUri": "https://upload.wikimedia.org/wikipedia/commons/thumb/e/e0/SNice.svg/220px-SNice.svg.png" + } + } + ] + }, + { + "symbol": "Bezos", + "thumbnailUri": "https://cloudflare-ipfs.com/ipfs/QmfEbirSA7indrEzjFAtJ589oChBFrqLio9kwpJwR4ttHx", + "tokenId": 0, + "decimals": 7, + "address": "KT1KdYiNTTByYQp7R3gxjc9K5rhQ2qtYdDTR", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "1.262971", + "tokenPool": "39667963.907993100000000000000000000000000000", + "address": "KT1DbjgC2sGUQHLpfuMEVvErWVsaKu5K6Pjo", + "sharesTotal": "7011145", + "midPrice": "0.000000", + "token": { + "address": "KT1KdYiNTTByYQp7R3gxjc9K5rhQ2qtYdDTR", + "decimals": 7, + "symbol": "Bezos", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://cloudflare-ipfs.com/ipfs/QmfEbirSA7indrEzjFAtJ589oChBFrqLio9kwpJwR4ttHx" + } + } + ] + }, + { + "symbol": "KIND", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmeCWy8D1FnGiaFRFjehTNyZfpqCCbxdrXC3Ao4cEPnKHf", + "tokenId": 0, + "decimals": 6, + "address": "KT1RVWLYn8zhrG6KKR3PDMAxeHV8DVrDXSTy", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.532891", + "tokenPool": "454460.119749000000000000000000000000000000", + "address": "KT1W2NKgcPdTh7dBtVrNgP2NEPQKCdwTxGe9", + "sharesTotal": "9634992", + "midPrice": "0.000001", + "token": { + "address": "KT1RVWLYn8zhrG6KKR3PDMAxeHV8DVrDXSTy", + "decimals": 6, + "symbol": "KIND", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmeCWy8D1FnGiaFRFjehTNyZfpqCCbxdrXC3Ao4cEPnKHf" + } + } + ] + }, + { + "symbol": "GSAL", + "thumbnailUri": "ipfs://QmeG8pd8PYRyPkCiL3nj4ghauuiYy13531vJYUfvNzyLX9", + "tokenId": 0, + "decimals": 0, + "address": "KT1VHd7ysjnvxEzwtjBAmYAmasvVCfPpSkiG", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "407.323804", + "tokenPool": "9213102.000000000000000000000000000000000000", + "address": "KT1BzNUUjURkTtNhXFkbGtu9fY3Q5scKZrvK", + "sharesTotal": "1320860389", + "midPrice": "0.000044", + "token": { + "address": "KT1VHd7ysjnvxEzwtjBAmYAmasvVCfPpSkiG", + "decimals": 0, + "symbol": "GSAL", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "8.186036", - "tokenPool": "5779412.895985000000000000000000000000000000", - "address": "KT1X6MJFtzypK6yuMXzg4KQ9FJAccH8PazKz", - "sharesTotal": "20074525", - "midPrice": "0.000001", - "token": { - "address": "KT1GMM54j7d8chfEitzUNJ2rrsA9Rs1zGBmK", - "decimals": 6, - "symbol": "GHST", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "BRBN", - "address": "KT1W88PDJBSrb7pjzDk5G1QskSt5fcW9iNpU", + "standard": "fa2", + "thumbnailUri": "ipfs://QmeG8pd8PYRyPkCiL3nj4ghauuiYy13531vJYUfvNzyLX9" + } + } + ] + }, + { + "symbol": "CATNIP", + "thumbnailUri": "https://upload.wikimedia.org/wikipedia/commons/thumb/5/58/Leaf_icon_03.svg/110px-Leaf_icon_03.svg.png", + "tokenId": 0, + "decimals": 3, + "address": "KT1KNmSyKZQwZ1mEKJcn4mBbfYYLcVKWWi5V", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "1.270598", + "tokenPool": "17738270.585000000000000000000000000000000000", + "address": "KT1FQVcuQjpxD2DBn94LypuHD8ixVL167m3Y", + "sharesTotal": "138069410", + "midPrice": "0.000000", + "token": { + "address": "KT1KNmSyKZQwZ1mEKJcn4mBbfYYLcVKWWi5V", + "decimals": 3, + "symbol": "CATNIP", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "8.084325", - "tokenPool": "0.138620420000000000000000000000000000", - "address": "KT1HrE1bAhgYhCNL6aKkscHTN3Ps6DidkBDi", - "sharesTotal": "7439120", - "midPrice": "58.319871", - "token": { - "address": "KT1W88PDJBSrb7pjzDk5G1QskSt5fcW9iNpU", - "decimals": 8, - "symbol": "BRBN", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "sCAS", + "standard": "fa2", + "thumbnailUri": "https://upload.wikimedia.org/wikipedia/commons/thumb/5/58/Leaf_icon_03.svg/110px-Leaf_icon_03.svg.png" + } + } + ] + }, + { + "symbol": "sCAS", + "thumbnailUri": "ipfs://QmaWmMKhxz5s2CdFkYpFqcQVZx3jjPNaMasuNnqCs4fCAr", + "tokenId": 1, + "decimals": 0, + "address": "KT1VHd7ysjnvxEzwtjBAmYAmasvVCfPpSkiG", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "9.348068", + "tokenPool": "182570.000000000000000000000000000000000000", + "address": "KT1HhUWkzjmdjFTgNMmGgdNWGb6wwEXA4XCT", + "sharesTotal": "68601324", + "midPrice": "0.000051", + "token": { "address": "KT1VHd7ysjnvxEzwtjBAmYAmasvVCfPpSkiG", + "decimals": 0, + "symbol": "sCAS", "tokenId": 1, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "6.986249", - "tokenPool": "243120.000000000000000000000000000000000000", - "address": "KT1HhUWkzjmdjFTgNMmGgdNWGb6wwEXA4XCT", - "sharesTotal": "68601324", - "midPrice": "0.000029", - "token": { - "address": "KT1VHd7ysjnvxEzwtjBAmYAmasvVCfPpSkiG", - "decimals": 0, - "symbol": "sCAS", - "tokenId": 1, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "SDO", - "address": "KT1LXup54FEkjwSSFFrEsA2iXQrpokphziKR", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "6.888927", - "tokenPool": "2833.221166000000000000000000000000000000", - "address": "KT1XYZcmMtVk6QfqKUQUTUt5F7tHxxzvw8Su", - "sharesTotal": "42975641", - "midPrice": "0.002431", - "token": { - "address": "KT1LXup54FEkjwSSFFrEsA2iXQrpokphziKR", - "decimals": 6, - "symbol": "SDO", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "CHEESE", - "address": "KT1URY2DcLd3v6XRjXKYvQmZMBncWYMuphNg", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "6.168114", - "tokenPool": "2186723.195661990000000000000000000000000000", - "address": "KT1Bi5RQGyTNiQubUyLtZYknE5u3Y6CeznWo", - "sharesTotal": "1485963", - "midPrice": "0.000003", - "token": { - "address": "KT1URY2DcLd3v6XRjXKYvQmZMBncWYMuphNg", - "decimals": 8, - "symbol": "CHEESE", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "KET", - "address": "KT1E51BdAf8bQYreGPeGbHH3HQ5DXvVBsEB3", + "standard": "fa2", + "thumbnailUri": "ipfs://QmaWmMKhxz5s2CdFkYpFqcQVZx3jjPNaMasuNnqCs4fCAr" + } + } + ] + }, + { + "symbol": "PNT", + "thumbnailUri": "https://banner2.cleanpng.com/20180130/xoe/kisspng-p-letter-%C3%80-hand-painted-letters-p-5a706cdc483773.1838480915173173402958.jpg", + "tokenId": 0, + "decimals": 2, + "address": "KT1KQ2Xa1M3PcW2pXh7JZJqubNnSBAyVcL9w", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "3.792473", + "tokenPool": "1.000000000000000000000000000000000000", + "address": "KT1Vz7YBpxHEXXDSwGaTwMebBDN67ydZF4yq", + "sharesTotal": "1900332", + "midPrice": "3.792473", + "token": { + "address": "KT1KQ2Xa1M3PcW2pXh7JZJqubNnSBAyVcL9w", + "decimals": 2, + "symbol": "PNT", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "5.883563", - "tokenPool": "40773.484000000000000000000000000000000000", - "address": "KT19qvQUYmcpWTN6oNnAwgfrHYVKoGgyoQZ5", - "sharesTotal": "6919325", - "midPrice": "0.000144", - "token": { - "address": "KT1E51BdAf8bQYreGPeGbHH3HQ5DXvVBsEB3", - "decimals": 3, - "symbol": "KET", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "sPEPE", - "address": "KT1Gynca5XpAGZMWTkQbkUdTV6EtgXdbvC6f", + "standard": "fa2", + "thumbnailUri": "https://banner2.cleanpng.com/20180130/xoe/kisspng-p-letter-%C3%80-hand-painted-letters-p-5a706cdc483773.1838480915173173402958.jpg" + } + } + ] + }, + { + "symbol": "MIL", + "thumbnailUri": "QmUpnopKukCaZs38X9hFR3GxjsVk6Jecu7zuhACWU5KqN2", + "tokenId": 0, + "decimals": 2, + "address": "KT1JWJSB6wkAEm3TGk9WUFHWNstBTKvuXsMC", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000006", + "tokenPool": "0.390000000000000000000000000000000000", + "address": "KT1LZqFas2GEUe5z5CFkL9Wqq6tZFzQbopm8", + "sharesTotal": "2", + "midPrice": "0.000015", + "token": { + "address": "KT1JWJSB6wkAEm3TGk9WUFHWNstBTKvuXsMC", + "decimals": 2, + "symbol": "MIL", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "QmUpnopKukCaZs38X9hFR3GxjsVk6Jecu7zuhACWU5KqN2" + } + } + ] + }, + { + "symbol": "BIRD", + "thumbnailUri": "https://i.ibb.co/nMWvZ3x/BIRD.png", + "tokenId": 0, + "decimals": 4, + "address": "KT1GkBaPh5pnPYNjMvm3hCGp6Q7tay1pkbjT", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "74.191881", + "tokenPool": "277.890700000000000000000000000000000000", + "address": "KT1SbBu8v8Knwx2kTD4hawbFYu8h4oKX8J6X", + "sharesTotal": "13323072", + "midPrice": "0.266982", + "token": { + "address": "KT1GkBaPh5pnPYNjMvm3hCGp6Q7tay1pkbjT", + "decimals": 4, + "symbol": "BIRD", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.ibb.co/nMWvZ3x/BIRD.png" + } + } + ] + }, + { + "symbol": "wAAVE", + "thumbnailUri": "ipfs://QmVUVanUUjHmgkjnUC6TVzG7pPz6iy7C8tnAoXNNpofYPg", + "tokenId": 0, + "decimals": 18, + "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "545.604552", + "tokenPool": "5.745447402088282428000000000000000000", + "address": "KT1Lvtxpg4MiT2Bs38XGxwh3LGi5MkCENp4v", + "sharesTotal": "328613231", + "midPrice": "94.962936", + "token": { + "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", + "decimals": 18, + "symbol": "wAAVE", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "5.682727", - "tokenPool": "605449.399282650000000000000000000000000000", - "address": "KT1HxVswgLnUUjuSsAi3fC4TxR9p7YuRGjL2", - "sharesTotal": "8103526", - "midPrice": "0.000009", - "token": { - "address": "KT1Gynca5XpAGZMWTkQbkUdTV6EtgXdbvC6f", - "decimals": 8, - "symbol": "sPEPE", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "wTaco", - "address": "KT1WtCq6FuL2kYTK1x7AkmpPjb8wEJZTUwvX", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "11.063733", - "tokenPool": "2689.000000000000000000000000000000000000", - "address": "KT1UV2rW49MUxvYVHrrQZejkr7mzaADQ3Wa4", - "sharesTotal": "98469270", - "midPrice": "0.004114", - "token": { - "address": "KT1WtCq6FuL2kYTK1x7AkmpPjb8wEJZTUwvX", - "decimals": 0, - "symbol": "wTaco", - "tokenId": 0, - "standard": "fa2" - } - }, - { - "name": "quipuswap", - "tezPool": "0.082878", - "tokenPool": "2.000000000000000000000000000000000000", - "address": "KT1G1ap6QA8GkVTRhzFEUrjakuaYmnczfhgt", - "sharesTotal": "17271054", - "midPrice": "0.041439", - "token": { - "address": "KT1WtCq6FuL2kYTK1x7AkmpPjb8wEJZTUwvX", - "decimals": 0, - "symbol": "wTaco", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "PRITA", - "address": "KT1Wxi4QfsaLqa82wprsWrqALHLQtPTpaabv", + "standard": "fa2", + "thumbnailUri": "ipfs://QmVUVanUUjHmgkjnUC6TVzG7pPz6iy7C8tnAoXNNpofYPg" + } + } + ] + }, + { + "symbol": "SMC", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmUMt1EDWkgFvA1ncwVXpnjqLpQSfi6HL3WrqQcfjbAj5A", + "tokenId": 0, + "decimals": 6, + "address": "KT1Qqx95QoKawym9bdH85Mrvq6R95Vf8vckd", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "3.511605", + "tokenPool": "221317487.220755000000000000000000000000000000", + "address": "KT1EHYGq85tByRmJt37BGVi331Ydd5pruDP6", + "sharesTotal": "61553662", + "midPrice": "0.000000", + "token": { + "address": "KT1Qqx95QoKawym9bdH85Mrvq6R95Vf8vckd", + "decimals": 6, + "symbol": "SMC", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "5.454835", - "tokenPool": "75.869943000000000000000000000000000000", - "address": "KT1SE2xuKackLc6h4KVtQxXAK4hBjXpj7YRT", - "sharesTotal": "58175930", - "midPrice": "0.071897", - "token": { - "address": "KT1Wxi4QfsaLqa82wprsWrqALHLQtPTpaabv", - "decimals": 6, - "symbol": "PRITA", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "BDoge", - "address": "KT1EMarewvdmyV42FDgGuhUhTKxrjutQWEBA", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "5.364764", - "tokenPool": "83981.458800000000000000000000000000000000", - "address": "KT1Th57AbgJmiZWDny6Ewqd2sx5qSxJwu8ry", - "sharesTotal": "10953390", - "midPrice": "0.000064", - "token": { - "address": "KT1EMarewvdmyV42FDgGuhUhTKxrjutQWEBA", - "decimals": 4, - "symbol": "BDoge", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "HIGH", - "address": "KT18is91HB1F1RxtJE2e2ShXG9NYi4P68fNE", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "5.344484", - "tokenPool": "7411425130.528221000000000000000000000000000000", - "address": "KT1DD3JAKCZsvqBtqJWm17gRMSf2PxMLhJbD", - "sharesTotal": "856330645", - "midPrice": "0.000000", - "token": { - "address": "KT18is91HB1F1RxtJE2e2ShXG9NYi4P68fNE", - "decimals": 6, - "symbol": "HIGH", - "tokenId": 0, - "standard": "fa12" - } - } - ] - }, - { - "symbol": "BELL", + "standard": "fa2", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmUMt1EDWkgFvA1ncwVXpnjqLpQSfi6HL3WrqQcfjbAj5A" + } + } + ] + }, + { + "symbol": "wBUSD", + "thumbnailUri": "ipfs://QmRB63vb8ThpmxHKF4An3XD8unHyCUuLYm5bZNhXwU4gAZ", + "tokenId": 1, + "decimals": 18, + "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "2413.943973", + "tokenPool": "2306.420459849536229749000000000000000000", + "address": "KT1UMAE2PBskeQayP5f2ZbGiVYF7h8bZ2gyp", + "sharesTotal": "236091167", + "midPrice": "1.046619", + "token": { + "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", + "decimals": 18, + "symbol": "wBUSD", + "tokenId": 1, + "standard": "fa2", + "thumbnailUri": "ipfs://QmRB63vb8ThpmxHKF4An3XD8unHyCUuLYm5bZNhXwU4gAZ" + } + } + ] + }, + { + "symbol": "CORN", + "thumbnailUri": "https://ipfs.io/ipfs/QmNMmmSGv8nDhNQoqAYxoS15UibVEgtwSBdzbcz4gorSmr", + "tokenId": 0, + "decimals": 6, + "address": "KT1VSfiXojPodWiZtSfaTooiKKsPAafJdJGa", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "2.559643", + "tokenPool": "4164245837.242054000000000000000000000000000000", + "address": "KT1Pp5rSkM4jc4LZ41VtHdtUCaRHq5HUj6wq", + "sharesTotal": "10643683", + "midPrice": "0.000000", + "token": { + "address": "KT1VSfiXojPodWiZtSfaTooiKKsPAafJdJGa", + "decimals": 6, + "symbol": "CORN", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://ipfs.io/ipfs/QmNMmmSGv8nDhNQoqAYxoS15UibVEgtwSBdzbcz4gorSmr" + } + } + ] + }, + { + "symbol": "wCEL", + "thumbnailUri": "ipfs://QmfNuyU3V6XeS9PgVXMDq4h5ux1VciUXtApP2ZGC4VSGLd", + "tokenId": 2, + "decimals": 4, + "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.011845", + "tokenPool": "0.048700000000000000000000000000000000", + "address": "KT1KuV43iebbbrkBMGov2QMgAbsnAksx6ncW", + "sharesTotal": "8762", + "midPrice": "0.243224", + "token": { + "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", + "decimals": 4, + "symbol": "wCEL", + "tokenId": 2, + "standard": "fa2", + "thumbnailUri": "ipfs://QmfNuyU3V6XeS9PgVXMDq4h5ux1VciUXtApP2ZGC4VSGLd" + } + } + ] + }, + { + "symbol": "BELL", + "thumbnailUri": "https://ipfs.io/ipfs/QmQtGtzH7A1YAb6kpKDz9i1pSLyuMDGz9WwJw93ao5R8Bt", + "tokenId": 0, + "decimals": 6, + "address": "KT1SiFqDqeFcUi5vQVSvuxB2g4xz7WLBrDek", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "1.516006", + "tokenPool": "150891583.930989000000000000000000000000000000", + "address": "KT1D4fH17ZVi9VhbCsowgty3ARsxmLVRiaLJ", + "sharesTotal": "9561539", + "midPrice": "0.000000", + "token": { "address": "KT1SiFqDqeFcUi5vQVSvuxB2g4xz7WLBrDek", + "decimals": 6, + "symbol": "BELL", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "5.296069", - "tokenPool": "34787407.333404000000000000000000000000000000", - "address": "KT1D4fH17ZVi9VhbCsowgty3ARsxmLVRiaLJ", - "sharesTotal": "8608130", - "midPrice": "0.000000", - "token": { - "address": "KT1SiFqDqeFcUi5vQVSvuxB2g4xz7WLBrDek", - "decimals": 6, - "symbol": "BELL", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "TV", - "address": "KT1NVYsEeGYKyNQkRiVU5i16nQyiXcGFF9LH", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "5.227547", - "tokenPool": "2600745.338681000000000000000000000000000000", - "address": "KT1SGExhNnCwANc59YfXKZBsikxEETQPsf5N", - "sharesTotal": "3628884454", - "midPrice": "0.000002", - "token": { - "address": "KT1NVYsEeGYKyNQkRiVU5i16nQyiXcGFF9LH", - "decimals": 6, - "symbol": "TV", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "UPMA", - "address": "KT1RACesjuf2ApJBjW6HnsV3w4MTuCcroUup", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "5.227006", - "tokenPool": "47908.444000000000000000000000000000000000", - "address": "KT1FcxZ14sMs1ejM1VdvYeBzPKyru7cthw2Q", - "sharesTotal": "5000000", - "midPrice": "0.000109", - "token": { - "address": "KT1RACesjuf2ApJBjW6HnsV3w4MTuCcroUup", - "decimals": 4, - "symbol": "UPMA", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "wCOMP", + "standard": "fa2", + "thumbnailUri": "https://ipfs.io/ipfs/QmQtGtzH7A1YAb6kpKDz9i1pSLyuMDGz9WwJw93ao5R8Bt" + } + } + ] + }, + { + "symbol": "wCOMP", + "thumbnailUri": "ipfs://QmYy2jUUE69W5eE9uwh4x5LqUxHt3GVy8sjXHhpViqCspG", + "tokenId": 3, + "decimals": 18, + "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "6.905833", + "tokenPool": "0.173551996801832051000000000000000000", + "address": "KT1DA8NH6UqCiSZhEg5KboxosMqLghwwvmTe", + "sharesTotal": "3562190", + "midPrice": "39.791147", + "token": { "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", + "decimals": 18, + "symbol": "wCOMP", "tokenId": 3, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "5.191211", - "tokenPool": "0.194165513626499658000000000000000000", - "address": "KT1DA8NH6UqCiSZhEg5KboxosMqLghwwvmTe", - "sharesTotal": "3285092", - "midPrice": "26.736009", - "token": { - "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", - "decimals": 18, - "symbol": "wCOMP", - "tokenId": 3, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "APE", - "address": "KT1QDt84bd4YUfE3ZJQYAu2Ckb7ZYNaWytee", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "5.033644", - "tokenPool": "3858393823.154649320000000000000000000000000000", - "address": "KT1HsiFgxSPPziN2P7dXH99eNqbWEc2pqYVe", - "sharesTotal": "1429298615176699", - "midPrice": "0.000000", - "token": { - "address": "KT1QDt84bd4YUfE3ZJQYAu2Ckb7ZYNaWytee", - "decimals": 8, - "symbol": "APE", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "PLAYA", - "address": "KT1AhFqs7dbJjLq6FPSjv2EEJX7jVq4BxvuA", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "5.000000", - "tokenPool": "168408.630930580000000000000000000000000000", - "address": "KT1U4XkzQ5iDQPGxcMxDYC7PHySnfYKxPY5v", - "sharesTotal": "0", - "midPrice": "0.000030", - "token": { - "address": "KT1AhFqs7dbJjLq6FPSjv2EEJX7jVq4BxvuA", - "decimals": 8, - "symbol": "PLAYA", - "tokenId": 0, - "standard": "fa12" - } - } - ] - }, - { - "symbol": "QNL", - "address": "KT1A45UMZVj4uW4BNKFc95Z9FTN6GXR1jiMf", + "standard": "fa2", + "thumbnailUri": "ipfs://QmYy2jUUE69W5eE9uwh4x5LqUxHt3GVy8sjXHhpViqCspG" + } + } + ] + }, + { + "symbol": "ONE", + "thumbnailUri": "https://i.ibb.co/qDKgMDK/ONE-coin.jpg", + "tokenId": 0, + "decimals": 10, + "address": "KT1VRB9X1KjCpaxT5V7PQrTxQPunLejQLwG7", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "109.451249", + "tokenPool": "0.083046246000000000000000000000000000", + "address": "KT1Js2KkULwMdJM8iZH8G36qb56skqSWuhce", + "sharesTotal": "4200200", + "midPrice": "1317.955408", + "token": { + "address": "KT1VRB9X1KjCpaxT5V7PQrTxQPunLejQLwG7", + "decimals": 10, + "symbol": "ONE", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.ibb.co/qDKgMDK/ONE-coin.jpg" + } + } + ] + }, + { + "symbol": "wCRO", + "thumbnailUri": "ipfs://QmUuhxgCm2EXwddpU8ofBBh9z1qzxf2BJRbxxR1ebYr8Hd", + "tokenId": 4, + "decimals": 8, + "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "8733.041074", + "tokenPool": "79316.893714700000000000000000000000000000", + "address": "KT1GSjkSg6MFmEMnTJSk6uyYpWXaEYFahrS4", + "sharesTotal": "1543348132", + "midPrice": "0.110103", + "token": { + "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", + "decimals": 8, + "symbol": "wCRO", + "tokenId": 4, + "standard": "fa2", + "thumbnailUri": "ipfs://QmUuhxgCm2EXwddpU8ofBBh9z1qzxf2BJRbxxR1ebYr8Hd" + } + } + ] + }, + { + "symbol": "STAR", + "thumbnailUri": "https://ibb.co/YTPsD91", + "tokenId": 0, + "decimals": 6, + "address": "KT1FTZUisdS5Sg7GS2g4QJWHXKaJjm42TBHz", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "2.573187", + "tokenPool": "18181.803583000000000000000000000000000000", + "address": "KT1JCvbKL2fkojHw9ZFAxc1xLVa31ZP1s3Gz", + "sharesTotal": "20562387", + "midPrice": "0.000142", + "token": { + "address": "KT1FTZUisdS5Sg7GS2g4QJWHXKaJjm42TBHz", + "decimals": 6, + "symbol": "STAR", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "4.980735", - "tokenPool": "80163.630000000000000000000000000000000000", - "address": "KT1NdkX8kzQ3QfG3bDe9TmkSVCB6zDWmi27N", - "sharesTotal": "62353583", - "midPrice": "0.000062", - "token": { - "address": "KT1A45UMZVj4uW4BNKFc95Z9FTN6GXR1jiMf", - "decimals": 2, - "symbol": "QNL", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "PKA", - "address": "KT1V5yCUQ73nUjrbk82ALcrGNdRFNk3k2tvX", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "4.949983", - "tokenPool": "20542.718000000000000000000000000000000000", - "address": "KT1BAPAVXMuYz63HrF9CGM9Gu8JVYTFpYqao", - "sharesTotal": "9210662", - "midPrice": "0.000241", - "token": { - "address": "KT1V5yCUQ73nUjrbk82ALcrGNdRFNk3k2tvX", - "decimals": 3, - "symbol": "PKA", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "TSV", - "address": "KT1B5LL3GRQL3uLbqwy3C8FL8H7CWj74EbnA", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "4.921759", - "tokenPool": "33370922.000000000000000000000000000000000000", - "address": "KT1Unphw5yMDcUNAtKpynxWPPLKDegAZQtzb", - "sharesTotal": "362670377", - "midPrice": "0.000000", - "token": { - "address": "KT1B5LL3GRQL3uLbqwy3C8FL8H7CWj74EbnA", - "decimals": 0, - "symbol": "TSV", - "tokenId": 0, - "standard": "fa12" - } - } - ] - }, - { - "symbol": "H2O", - "address": "KT1NiwXj3cMPcHHgJbA2Aeuvjx1FE6THV7d5", + "standard": "fa2", + "thumbnailUri": "https://ibb.co/YTPsD91" + } + } + ] + }, + { + "symbol": "wFTT", + "thumbnailUri": "ipfs://QmVBjgrJiUynv72MR6rRyUu1WLKX52bWGiKk7H2CaFDRNW", + "tokenId": 6, + "decimals": 18, + "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "9.200941", + "tokenPool": "2.884496938684314724000000000000000000", + "address": "KT1SzCtZYesqXt57qHymr3Hj37zPQT47JN6x", + "sharesTotal": "3855366", + "midPrice": "3.189791", + "token": { + "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", + "decimals": 18, + "symbol": "wFTT", + "tokenId": 6, + "standard": "fa2", + "thumbnailUri": "ipfs://QmVBjgrJiUynv72MR6rRyUu1WLKX52bWGiKk7H2CaFDRNW" + } + } + ] + }, + { + "symbol": "Flood", + "thumbnailUri": "https://i.imgur.com/ExF0Q1E.jpg", + "tokenId": 0, + "decimals": 5, + "address": "KT1BXi2AgdykJ4vVmEqKZfWznBrJ6Wn2pEGL", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.647549", + "tokenPool": "466790.645330000000000000000000000000000000", + "address": "KT19RC3fS8824Z9T4cfLguZuo4gJzCTMbLND", + "sharesTotal": "4205148", + "midPrice": "0.000001", + "token": { + "address": "KT1BXi2AgdykJ4vVmEqKZfWznBrJ6Wn2pEGL", + "decimals": 5, + "symbol": "Flood", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.imgur.com/ExF0Q1E.jpg" + } + } + ] + }, + { + "symbol": "wHT", + "thumbnailUri": "ipfs://Qmayt4JbYTkQinNUeVGLhp51LTRMD1273HRgo9p96SoQaM", + "tokenId": 7, + "decimals": 18, + "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "4.653985", + "tokenPool": "1.934462308096815658000000000000000000", + "address": "KT1GsTjbWkTgtsWenM6oWuTuft3Qb46p2x4c", + "sharesTotal": "1784475", + "midPrice": "2.405829", + "token": { + "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", + "decimals": 18, + "symbol": "wHT", + "tokenId": 7, + "standard": "fa2", + "thumbnailUri": "ipfs://Qmayt4JbYTkQinNUeVGLhp51LTRMD1273HRgo9p96SoQaM" + } + } + ] + }, + { + "symbol": "CLOUD", + "thumbnailUri": "https://kalamint.mypinata.cloud/ipfs/QmS28PZpHvHTXMqc6jeJnW8JfBTju3mitf3bm2NMAqeq7Y", + "tokenId": 0, + "decimals": 3, + "address": "KT1JXc6JfPrgCzLHoQTsGJGC19PDvDNuRSm6", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.944798", + "tokenPool": "42522.553000000000000000000000000000000000", + "address": "KT1QFQtQPZZMUR4JtuQxq2fJk8uK7B66q2wK", + "sharesTotal": "1257705", + "midPrice": "0.000022", + "token": { + "address": "KT1JXc6JfPrgCzLHoQTsGJGC19PDvDNuRSm6", + "decimals": 3, + "symbol": "CLOUD", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "4.703588", - "tokenPool": "1045768.445051000000000000000000000000000000", - "address": "KT1NeBbCRpN9hYzToVMFMVVdDoqGHXDK7sNX", - "sharesTotal": "2193787", - "midPrice": "0.000004", - "token": { - "address": "KT1NiwXj3cMPcHHgJbA2Aeuvjx1FE6THV7d5", - "decimals": 6, - "symbol": "H2O", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "REGI", - "address": "KT19N5AwdSar5acfVu16fBEjtAcAHTfHeb9a", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "4.574648", - "tokenPool": "340586039.166200000000000000000000000000000000", - "address": "KT1SpB8Jk6GPCWUjMod8Q5NDpfagQaXVSpNk", - "sharesTotal": "380698569", - "midPrice": "0.000000", - "token": { - "address": "KT19N5AwdSar5acfVu16fBEjtAcAHTfHeb9a", - "decimals": 4, - "symbol": "REGI", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "LV", + "standard": "fa2", + "thumbnailUri": "https://kalamint.mypinata.cloud/ipfs/QmS28PZpHvHTXMqc6jeJnW8JfBTju3mitf3bm2NMAqeq7Y" + } + } + ] + }, + { + "symbol": "wHUSD", + "thumbnailUri": "ipfs://QmT9bozupnmWjmjnXp8KcZqDY9HYLLr5KgojfxqgoWRgCt", + "tokenId": 8, + "decimals": 8, + "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "63.811504", + "tokenPool": "2045.732865550000000000000000000000000000", + "address": "KT1AN7BBmeSUN5eDDQLEhWmXv1gn4exc5k8R", + "sharesTotal": "50716101", + "midPrice": "0.031192", + "token": { + "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", + "decimals": 8, + "symbol": "wHUSD", + "tokenId": 8, + "standard": "fa2", + "thumbnailUri": "ipfs://QmT9bozupnmWjmjnXp8KcZqDY9HYLLr5KgojfxqgoWRgCt" + } + } + ] + }, + { + "symbol": "BRBN", + "thumbnailUri": "https://cryptocurrencytoday.net/images/BRBN_logo_350x350.png", + "tokenId": 0, + "decimals": 8, + "address": "KT1W88PDJBSrb7pjzDk5G1QskSt5fcW9iNpU", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1HrE1bAhgYhCNL6aKkscHTN3Ps6DidkBDi", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1W88PDJBSrb7pjzDk5G1QskSt5fcW9iNpU", + "decimals": 8, + "symbol": "BRBN", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://cryptocurrencytoday.net/images/BRBN_logo_350x350.png" + } + } + ] + }, + { + "symbol": "wLEO", + "thumbnailUri": "ipfs://QmPrmELnhSoheHCHx6XcjSera7f89NYmXabBnSRSCdDjBh", + "tokenId": 9, + "decimals": 18, + "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.028773", + "tokenPool": "0.090967130354902074000000000000000000", + "address": "KT1MpRQvn2VRR26VJFPYUGcB8qqxBbXgk5xe", + "sharesTotal": "17694", + "midPrice": "0.316301", + "token": { + "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", + "decimals": 18, + "symbol": "wLEO", + "tokenId": 9, + "standard": "fa2", + "thumbnailUri": "ipfs://QmPrmELnhSoheHCHx6XcjSera7f89NYmXabBnSRSCdDjBh" + } + } + ] + }, + { + "symbol": "LV", + "thumbnailUri": "http://clipart-library.com/clip-art/1337072_hand-heart-png.htm", + "tokenId": 0, + "decimals": 3, + "address": "KT1Hg9BvtrgJ9muyTWBbTAuYWeCvcJu1G69V", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "4.235801", + "tokenPool": "510.601000000000000000000000000000000000", + "address": "KT1PRH9SzjpFXfeFZwzPpAjauZ8NhpFPrPnv", + "sharesTotal": "2002647", + "midPrice": "0.008296", + "token": { "address": "KT1Hg9BvtrgJ9muyTWBbTAuYWeCvcJu1G69V", + "decimals": 3, + "symbol": "LV", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "4.448370", - "tokenPool": "486.131000000000000000000000000000000000", - "address": "KT1PRH9SzjpFXfeFZwzPpAjauZ8NhpFPrPnv", - "sharesTotal": "2002647", - "midPrice": "0.009151", - "token": { - "address": "KT1Hg9BvtrgJ9muyTWBbTAuYWeCvcJu1G69V", - "decimals": 3, - "symbol": "LV", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "RICE", - "address": "KT1Wa2ncR8GbeQrW6Dbtpc8uTrK7q5CH4F2Q", + "standard": "fa2", + "thumbnailUri": "http://clipart-library.com/clip-art/1337072_hand-heart-png.htm" + } + } + ] + }, + { + "symbol": "wMKR", + "thumbnailUri": "ipfs://QmPTob6YP9waErN4gMXqHg6ZyazSFB9CEojot4BB2XPpZJ", + "tokenId": 12, + "decimals": 18, + "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "9.062846", + "tokenPool": "0.005741217648325337000000000000000000", + "address": "KT1MaefGJRtu57DiVhQNEjYgTYok3X71iEDj", + "sharesTotal": "1457104", + "midPrice": "1578.558166", + "token": { + "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", + "decimals": 18, + "symbol": "wMKR", + "tokenId": 12, + "standard": "fa2", + "thumbnailUri": "ipfs://QmPTob6YP9waErN4gMXqHg6ZyazSFB9CEojot4BB2XPpZJ" + } + } + ] + }, + { + "symbol": "PRITA", + "thumbnailUri": "https://cdn4.iconfinder.com/data/icons/drink-and-cocktails/206/Margarita_Up-512.png", + "tokenId": 0, + "decimals": 6, + "address": "KT1Wxi4QfsaLqa82wprsWrqALHLQtPTpaabv", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.596916", + "tokenPool": "776.042705000000000000000000000000000000", + "address": "KT1SE2xuKackLc6h4KVtQxXAK4hBjXpj7YRT", + "sharesTotal": "61301890", + "midPrice": "0.000769", + "token": { + "address": "KT1Wxi4QfsaLqa82wprsWrqALHLQtPTpaabv", + "decimals": 6, + "symbol": "PRITA", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "4.399419", - "tokenPool": "7007534869.680000000000000000000000000000000000", - "address": "KT19Koy81QJLtghfSsDMLTmwj9myESNTbUaS", - "sharesTotal": "109722159", - "midPrice": "0.000000", - "token": { - "address": "KT1Wa2ncR8GbeQrW6Dbtpc8uTrK7q5CH4F2Q", - "decimals": 2, - "symbol": "RICE", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "CaTz", - "address": "KT1Ph8ptSU4rf7PPg2YBMR6LTpr6rc4MMyrq", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "4.366904", - "tokenPool": "14303376480.000000000000000000000000000000000000", - "address": "KT1XmsFAdPhsDnhGzQLqQQiGkCGoyekGFC8B", - "sharesTotal": "2375991066", - "midPrice": "0.000000", - "token": { - "address": "KT1Ph8ptSU4rf7PPg2YBMR6LTpr6rc4MMyrq", - "decimals": 0, - "symbol": "CaTz", - "tokenId": 0, - "standard": "fa12" - } - } - ] - }, - { - "symbol": "tzMeta", - "address": "KT1DR2qLXaAze9Cq1CEUcRjM1qNLBzgureRT", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "4.216849", - "tokenPool": "1732414186.592000000000000000000000000000000000", - "address": "KT1JitjBtBsjjQrMGyA57ScjHSP6JF5zE7eS", - "sharesTotal": "3812537", - "midPrice": "0.000000", - "token": { - "address": "KT1DR2qLXaAze9Cq1CEUcRjM1qNLBzgureRT", - "decimals": 4, - "symbol": "tzMeta", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "ATQLA", - "address": "KT1RdLrFcXrwbTX9vaYcbUohTTXpe1Eco2sq", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "4.158781", - "tokenPool": "0.756175000000000000000000000000000000", - "address": "KT1L6Kenhh2dexw8V3NKWvRLBtKNfVGp3tMB", - "sharesTotal": "49556771", - "midPrice": "5.499760", - "token": { - "address": "KT1RdLrFcXrwbTX9vaYcbUohTTXpe1Eco2sq", - "decimals": 6, - "symbol": "ATQLA", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "BOLLA", - "address": "KT196ZiPqPTZDsWpWvuhgZUrYK5x8WxYz3wb", + "standard": "fa2", + "thumbnailUri": "https://cdn4.iconfinder.com/data/icons/drink-and-cocktails/206/Margarita_Up-512.png" + } + } + ] + }, + { + "symbol": "wOKB", + "thumbnailUri": "ipfs://QmPpmuLw4i9qJLMmGjXrGxrcPBwTiNZgLGuh7kYXeyTdyA", + "tokenId": 13, + "decimals": 18, + "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "8.379003", + "tokenPool": "0.172751435766082248000000000000000000", + "address": "KT1NQyNPXmjYktNBDhYkBKyTGYcJSkNbYXuh", + "sharesTotal": "663400", + "midPrice": "48.503232", + "token": { + "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", + "decimals": 18, + "symbol": "wOKB", + "tokenId": 13, + "standard": "fa2", + "thumbnailUri": "ipfs://QmPpmuLw4i9qJLMmGjXrGxrcPBwTiNZgLGuh7kYXeyTdyA" + } + } + ] + }, + { + "symbol": "SEBPUMP", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmUtFY8EJwyDkpgbt6L85HvDfuDQWNw4bfKrWf234FQDUn", + "tokenId": 0, + "decimals": 8, + "address": "KT1Rw3vGmfZfZhX9CNnVT1q7NHU7brgiUiGD", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.187970", + "tokenPool": "518823.453109930000000000000000000000000000", + "address": "KT1FTizZuTUrADe7ZV9KAFoLiFdmSpS2H7eu", + "sharesTotal": "686214", + "midPrice": "0.000000", + "token": { + "address": "KT1Rw3vGmfZfZhX9CNnVT1q7NHU7brgiUiGD", + "decimals": 8, + "symbol": "SEBPUMP", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmUtFY8EJwyDkpgbt6L85HvDfuDQWNw4bfKrWf234FQDUn" + } + } + ] + }, + { + "symbol": "wUNI", + "thumbnailUri": "ipfs://QmQBezdVvotCGnFHgQNKduLdxEJhfgruSEqtwnWY7mESb2", + "tokenId": 16, + "decimals": 18, + "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "52.046435", + "tokenPool": "14.016868502850063937000000000000000000", + "address": "KT1Ti3nJT85vNn81Dy5VyNzgufkAorUoZ96q", + "sharesTotal": "23044199", + "midPrice": "3.713129", + "token": { + "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", + "decimals": 18, + "symbol": "wUNI", + "tokenId": 16, + "standard": "fa2", + "thumbnailUri": "ipfs://QmQBezdVvotCGnFHgQNKduLdxEJhfgruSEqtwnWY7mESb2" + } + } + ] + }, + { + "symbol": "sPEPE", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmUffXrn8vkd1pyhQP5X1B1K3WknWHwfZQ66i4r36WLtit", + "tokenId": 0, + "decimals": 8, + "address": "KT1Gynca5XpAGZMWTkQbkUdTV6EtgXdbvC6f", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "2.212302", + "tokenPool": "1561655.092702510000000000000000000000000000", + "address": "KT1HxVswgLnUUjuSsAi3fC4TxR9p7YuRGjL2", + "sharesTotal": "8103526", + "midPrice": "0.000001", + "token": { + "address": "KT1Gynca5XpAGZMWTkQbkUdTV6EtgXdbvC6f", + "decimals": 8, + "symbol": "sPEPE", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "4.112798", - "tokenPool": "937451550.962304000000000000000000000000000000", - "address": "KT1Qt8bLFWbTiJ7DChQooBmab1MMHTx9uo8U", - "sharesTotal": "18733718987", - "midPrice": "0.000000", - "token": { - "address": "KT196ZiPqPTZDsWpWvuhgZUrYK5x8WxYz3wb", - "decimals": 6, - "symbol": "BOLLA", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "F15H", - "address": "KT1GorbQ7ZKetuCRQZrpgDq3QW1KAtqhzytk", + "standard": "fa2", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmUffXrn8vkd1pyhQP5X1B1K3WknWHwfZQ66i4r36WLtit" + } + } + ] + }, + { + "symbol": "wUSDT", + "thumbnailUri": "ipfs://QmVbiHa37pe2U9FfXBYfvrLNpb38rbXwaN19HwZD2speFA", + "tokenId": 18, + "decimals": 6, + "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "3801.161474", + "tokenPool": "2877.638631000000000000000000000000000000", + "address": "KT1T4pfr6NL8dUiz8ibesjEvH2Ne3k6AuXgn", + "sharesTotal": "1332438986", + "midPrice": "1.320931", + "token": { + "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", + "decimals": 6, + "symbol": "wUSDT", + "tokenId": 18, + "standard": "fa2", + "thumbnailUri": "ipfs://QmVbiHa37pe2U9FfXBYfvrLNpb38rbXwaN19HwZD2speFA" + } + } + ] + }, + { + "symbol": "SEX", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmeJqNpRQ2MHevWBPR3dqhus7X5Wo5hmirPPH4AsGNh55h", + "tokenId": 0, + "decimals": 6, + "address": "KT1UAE1nZQhHdPD4tZMEEqhdbQHbxZ9qh5zF", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "25.673181", + "tokenPool": "7768348565.678443000000000000000000000000000000", + "address": "KT1BqX1e5ESvdxbp1ZxjaBHscvHWVNkVxUiw", + "sharesTotal": "34279752", + "midPrice": "0.000000", + "token": { + "address": "KT1UAE1nZQhHdPD4tZMEEqhdbQHbxZ9qh5zF", + "decimals": 6, + "symbol": "SEX", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "4.052231", - "tokenPool": "3919879.890000000000000000000000000000000000", - "address": "KT1CNEgfKrGWtYdWAGG3cyZAUcFFpotmAme9", - "sharesTotal": "3938007", - "midPrice": "0.000001", - "token": { - "address": "KT1GorbQ7ZKetuCRQZrpgDq3QW1KAtqhzytk", - "decimals": 2, - "symbol": "F15H", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "SWAP", - "address": "KT1Q3oMXVxL12Rz4GCwztu8wXBTfWWAM4r5t", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "4.021692", - "tokenPool": "9072107.000000000000000000000000000000000000", - "address": "KT1SArJcuCSKPzA2NBgR8QbXgD3acfDREBV5", - "sharesTotal": "166098236", - "midPrice": "0.000000", - "token": { - "address": "KT1Q3oMXVxL12Rz4GCwztu8wXBTfWWAM4r5t", - "decimals": 0, - "symbol": "SWAP", - "tokenId": 0, - "standard": "fa12" - } - } - ] - }, - { - "symbol": "UNI", - "address": "KT1QM9Ejozgu2JGkbUb22Ng51CTwhgASE7QR", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "3.907802", - "tokenPool": "29438094.580600000000000000000000000000000000", - "address": "KT1QzxdvToyFwXuy4GFRkQRbUSmrqo66jMyv", - "sharesTotal": "20962523", - "midPrice": "0.000000", - "token": { - "address": "KT1QM9Ejozgu2JGkbUb22Ng51CTwhgASE7QR", - "decimals": 4, - "symbol": "UNI", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "PNT", - "address": "KT1KQ2Xa1M3PcW2pXh7JZJqubNnSBAyVcL9w", + "standard": "fa2", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmeJqNpRQ2MHevWBPR3dqhus7X5Wo5hmirPPH4AsGNh55h" + } + } + ] + }, + { + "symbol": "CRUNCH", + "thumbnailUri": "ipfs://bafybeienhhbxz53n3gtg7stjou2zs3lmhupahwovv2kxwh5uass3bc5xzq", + "tokenId": 0, + "decimals": 8, + "address": "KT1BHCumksALJQJ8q8to2EPigPW6qpyTr7Ng", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "475.989389", + "tokenPool": "60491296.903448740000000000000000000000000000", + "address": "KT1RRgK6eXvCWCiEGWhRZCSVGzhDzwXEEjS4", + "sharesTotal": "16557227434", + "midPrice": "0.000008", + "token": { + "address": "KT1BHCumksALJQJ8q8to2EPigPW6qpyTr7Ng", + "decimals": 8, + "symbol": "CRUNCH", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "ipfs://bafybeienhhbxz53n3gtg7stjou2zs3lmhupahwovv2kxwh5uass3bc5xzq" + } + } + ] + }, + { + "symbol": "KNK", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmYvsUCJpkCWkz9RY6uzntGjeV74SUtXXa3ohVxWZp47GH", + "tokenId": 0, + "decimals": 6, + "address": "KT1NPEVemjTzFoky8VSs6N14Me79Ezu7hMCK", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "33.201016", + "tokenPool": "481732004.728057000000000000000000000000000000", + "address": "KT1XHCwB1aBeSBRiGHsZUBeWqTja6yKarXUz", + "sharesTotal": "30759234", + "midPrice": "0.000000", + "token": { + "address": "KT1NPEVemjTzFoky8VSs6N14Me79Ezu7hMCK", + "decimals": 6, + "symbol": "KNK", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "3.792473", - "tokenPool": "1.000000000000000000000000000000000000", - "address": "KT1Vz7YBpxHEXXDSwGaTwMebBDN67ydZF4yq", - "sharesTotal": "1900332", - "midPrice": "3.792473", - "token": { - "address": "KT1KQ2Xa1M3PcW2pXh7JZJqubNnSBAyVcL9w", - "decimals": 2, - "symbol": "PNT", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "TRX", - "address": "KT1Ru2mLLtdmnzpakGKaGii32Tax3h81SEYH", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "3.746683", - "tokenPool": "28257463178.546786000000000000000000000000000000", - "address": "KT1VEUWLJGktxZkU7jRzVfPvf82rUbKWF3kV", - "sharesTotal": "7148819", - "midPrice": "0.000000", - "token": { - "address": "KT1Ru2mLLtdmnzpakGKaGii32Tax3h81SEYH", - "decimals": 6, - "symbol": "TRX", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "SMC", - "address": "KT1Qqx95QoKawym9bdH85Mrvq6R95Vf8vckd", + "standard": "fa2", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmYvsUCJpkCWkz9RY6uzntGjeV74SUtXXa3ohVxWZp47GH" + } + } + ] + }, + { + "symbol": "FKB", + "thumbnailUri": "https://scontent.fsac1-2.fna.fbcdn.net/v/t1.6435-9/181890734_808382610034581_2391798414909203062_n.jpg?_nc_cat=103&ccb=1-3&_nc_sid=730e14&_nc_ohc=7Vfwv08XLWkAX9o04A3&_nc_ht=scontent.fsac1-2.fna&oh=a1d154f51163dc1e12fb71e089943612&oe=60B579F1", + "tokenId": 0, + "decimals": 8, + "address": "KT1FftDwLS6F7RVrpQ8nTmScCfNFaAyWTSdc", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.100685", + "tokenPool": "10312649.140773810000000000000000000000000000", + "address": "KT1MEJ7TUrphCY6tQ9LmyuyreZ5SRA1uU4xC", + "sharesTotal": "10091", + "midPrice": "0.000000", + "token": { + "address": "KT1FftDwLS6F7RVrpQ8nTmScCfNFaAyWTSdc", + "decimals": 8, + "symbol": "FKB", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "3.735129", - "tokenPool": "221317485.388423000000000000000000000000000000", - "address": "KT1EHYGq85tByRmJt37BGVi331Ydd5pruDP6", - "sharesTotal": "63485407", - "midPrice": "0.000000", - "token": { - "address": "KT1Qqx95QoKawym9bdH85Mrvq6R95Vf8vckd", - "decimals": 6, - "symbol": "SMC", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { + "standard": "fa2", + "thumbnailUri": "https://scontent.fsac1-2.fna.fbcdn.net/v/t1.6435-9/181890734_808382610034581_2391798414909203062_n.jpg?_nc_cat=103&ccb=1-3&_nc_sid=730e14&_nc_ohc=7Vfwv08XLWkAX9o04A3&_nc_ht=scontent.fsac1-2.fna&oh=a1d154f51163dc1e12fb71e089943612&oe=60B579F1" + } + } + ] + }, + { + "symbol": "ZNA", + "thumbnailUri": "https://ipfs.io/ipfs/QmUxwCC1SG1x4aSMcfSPJDMwecEkDwz3oqWP322Sgcux8N", + "tokenId": 0, + "decimals": 5, + "address": "KT19Eb7YwFTqaiHhtbe92boK23jUJjAAAwGy", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1Wggn79TRcKuBD74uLtnyUg7DdJtLeLb5x", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT19Eb7YwFTqaiHhtbe92boK23jUJjAAAwGy", + "decimals": 5, + "symbol": "ZNA", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://ipfs.io/ipfs/QmUxwCC1SG1x4aSMcfSPJDMwecEkDwz3oqWP322Sgcux8N" + } + } + ] + }, + { + "symbol": "Bezos", + "thumbnailUri": "https://cloudflare-ipfs.com/ipfs/QmfEbirSA7indrEzjFAtJ589oChBFrqLio9kwpJwR4ttHx", + "tokenId": 0, + "decimals": 0, + "address": "KT1J4m9nxZQSKDwRNahAL1fziuwW9o5hb8Tb", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "172.878300", + "tokenPool": "289907767.000000000000000000000000000000000000", + "address": "KT1ETAtdv2PTvXwbGGsWWjnswfagdUc77hiP", + "sharesTotal": "154164695", + "midPrice": "0.000001", + "token": { + "address": "KT1J4m9nxZQSKDwRNahAL1fziuwW9o5hb8Tb", + "decimals": 0, + "symbol": "Bezos", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://cloudflare-ipfs.com/ipfs/QmfEbirSA7indrEzjFAtJ589oChBFrqLio9kwpJwR4ttHx" + } + } + ] + }, + { + "symbol": "ELT", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmbeXzK7zG1o1g18GVGuzgncD8Pkb5K4CFxxUEQ48Ch1bA/giphy.gif", + "tokenId": 0, + "decimals": 6, + "address": "KT1KymUkTTtvfohvd8jPnCSQvpNQ5vTQ1krE", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1D6xVWbpypZW63tszU28KrHXMYMbMqoRTi", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1KymUkTTtvfohvd8jPnCSQvpNQ5vTQ1krE", + "decimals": 6, + "symbol": "ELT", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmbeXzK7zG1o1g18GVGuzgncD8Pkb5K4CFxxUEQ48Ch1bA/giphy.gif" + } + } + ] + }, + { + "symbol": "BISA", + "thumbnailUri": "https://energiminas.com/wp-content/uploads/2018/07/bisa-web-808x454.jpg", + "tokenId": 0, + "decimals": 3, + "address": "KT1BRXzrMA8qHp9RkZmftV1YLCTdNrEXXBvu", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1MrzcYWmMbPf3ftyKKH5RaMUVhQSXpZXjP", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1BRXzrMA8qHp9RkZmftV1YLCTdNrEXXBvu", + "decimals": 3, + "symbol": "BISA", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://energiminas.com/wp-content/uploads/2018/07/bisa-web-808x454.jpg" + } + } + ] + }, + { + "symbol": "Dog", + "thumbnailUri": "http://image.noelshack.com/fichiers/2021/28/3/1626226607-snoop.jpg", + "tokenId": 0, + "decimals": 15, + "address": "KT1MTKDXgAHrbA22MJuHiBRU6r8eUkuvfdRD", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "11.398159", + "tokenPool": "57946.383974006392118000000000000000000000", + "address": "KT1WMJ73rHAxqJXh8iMefeMQ5A32zUaaognt", + "sharesTotal": "10008478", + "midPrice": "0.000197", + "token": { + "address": "KT1MTKDXgAHrbA22MJuHiBRU6r8eUkuvfdRD", + "decimals": 15, + "symbol": "Dog", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "http://image.noelshack.com/fichiers/2021/28/3/1626226607-snoop.jpg" + } + } + ] + }, + { + "symbol": "sVote", + "thumbnailUri": "ipfs://QmQra8QK4zdE3vC7NZ5yyNsa7kP9Zjw3eMDiWoTBzAS9n3", + "tokenId": 0, + "decimals": 0, + "address": "KT1Qf46j2x37sAN4t2MKRQRVt9gc4FZ5duMs", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1VcUfNTWM8565RNLnwzmJRVHUNbZBKUtcj", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1Qf46j2x37sAN4t2MKRQRVt9gc4FZ5duMs", + "decimals": 0, + "symbol": "sVote", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "ipfs://QmQra8QK4zdE3vC7NZ5yyNsa7kP9Zjw3eMDiWoTBzAS9n3" + } + }, + { + "name": "quipuswap", + "tezPool": "0.040942", + "tokenPool": "124618.000000000000000000000000000000000000", + "address": "KT1NfjFAuAvkgDRGqi4kXEta2rvXP3sfb1rG", + "sharesTotal": "5000000", + "midPrice": "0.000000", + "token": { + "address": "KT1Qf46j2x37sAN4t2MKRQRVt9gc4FZ5duMs", + "decimals": 0, + "symbol": "sVote", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "ipfs://QmQra8QK4zdE3vC7NZ5yyNsa7kP9Zjw3eMDiWoTBzAS9n3" + } + } + ] + }, + { + "symbol": "BNT", + "thumbnailUri": "https://ibb.co/vxQqdrf", + "tokenId": 0, + "decimals": 10, + "address": "KT1PccG9rVLLYKJmvc9yDW6tc1g4tcb2uQLh", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT19DwSauiVCeJGnUAz6yYRDCdK9pYAd4vmX", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1PccG9rVLLYKJmvc9yDW6tc1g4tcb2uQLh", + "decimals": 10, + "symbol": "BNT", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://ibb.co/vxQqdrf" + } + } + ] + }, + { + "symbol": "BDVXP", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmVbkmsnie44NUMFzhamLcDKTFAzVbPafYGLna65KfKCHK", + "tokenId": 0, + "decimals": 6, + "address": "KT1T1PeeRDbsKDYM2nX8JjJ1kkAhHh5FnjgC", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "162.665133", + "tokenPool": "13618028.418469000000000000000000000000000000", + "address": "KT1C755xS3TLH4HEWaCJvWuoHTcytTBdEjgS", + "sharesTotal": "559873863", + "midPrice": "0.000012", + "token": { + "address": "KT1T1PeeRDbsKDYM2nX8JjJ1kkAhHh5FnjgC", + "decimals": 6, + "symbol": "BDVXP", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmVbkmsnie44NUMFzhamLcDKTFAzVbPafYGLna65KfKCHK" + } + } + ] + }, + { + "symbol": "GOT", + "thumbnailUri": "ipfs://bafybeifw2phljhvmyiyam2fjidogcmeh2jdaml4dcbgdf6ezgtre4oekl4", + "tokenId": 0, + "decimals": 8, + "address": "KT1GioMCKwRyWoQpdrwxvsPVEsFJkkLyquVZ", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "606.946060", + "tokenPool": "1459840.907878650000000000000000000000000000", + "address": "KT1JyPE1BWdYoRGBvvKhEPbcVRd3C9NCCwQC", + "sharesTotal": "5087788887", + "midPrice": "0.000416", + "token": { + "address": "KT1GioMCKwRyWoQpdrwxvsPVEsFJkkLyquVZ", + "decimals": 8, + "symbol": "GOT", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "ipfs://bafybeifw2phljhvmyiyam2fjidogcmeh2jdaml4dcbgdf6ezgtre4oekl4" + } + } + ] + }, + { + "symbol": "FKB", + "thumbnailUri": "ipfs://QmZbexkH5MYPc3UMpwkeKt18enUzbKGDCsmZonBdFjkM5T", + "tokenId": 0, + "decimals": 6, + "address": "KT1E6C7WkwG8GWnPBBJJDMADrYuuYaK7ddmM", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "10.506024", + "tokenPool": "6940522058.065085000000000000000000000000000000", + "address": "KT1UyqBg82dWGBCyFbRD8J96Ud6diYLkt8Ca", + "sharesTotal": "366331073", + "midPrice": "0.000000", + "token": { + "address": "KT1E6C7WkwG8GWnPBBJJDMADrYuuYaK7ddmM", + "decimals": 6, + "symbol": "FKB", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "ipfs://QmZbexkH5MYPc3UMpwkeKt18enUzbKGDCsmZonBdFjkM5T" + } + } + ] + }, + { + "symbol": "SEBMOON", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmSdEDSAZ9tg7rWoPNSsUm3MY8TXAC35VzefBB5p1adRy9", + "tokenId": 0, + "decimals": 4, + "address": "KT1PJJpsEmSz1TjXqbTMpMaqydHVhN2jpeNZ", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.213686", + "tokenPool": "971359.059700000000000000000000000000000000", + "address": "KT1VDb2YFRrXFULp6gWkDAP1f2nhezQ21dXT", + "sharesTotal": "3179399", + "midPrice": "0.000000", + "token": { + "address": "KT1PJJpsEmSz1TjXqbTMpMaqydHVhN2jpeNZ", + "decimals": 4, + "symbol": "SEBMOON", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmSdEDSAZ9tg7rWoPNSsUm3MY8TXAC35VzefBB5p1adRy9" + } + } + ] + }, + { + "symbol": "FARM", + "thumbnailUri": "https://i.postimg.cc/mgWJwckY/Farmer.png", + "tokenId": 0, + "decimals": 4, + "address": "KT1CnuKyaAuYBAwJf9g5LobtxRZsF2KCD3o6", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "65.080547", + "tokenPool": "129908541188.461400000000000000000000000000000000", + "address": "KT1NF5vZdWjYQcb8Uq9SkgTrLgc9P23AraX7", + "sharesTotal": "820991621", + "midPrice": "0.000000", + "token": { + "address": "KT1CnuKyaAuYBAwJf9g5LobtxRZsF2KCD3o6", + "decimals": 4, + "symbol": "FARM", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.postimg.cc/mgWJwckY/Farmer.png" + } + } + ] + }, + { + "symbol": "DRG", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 6, + "address": "KT1GKQNxR4iRvER54c7Be2TcYPP18fWQqB88", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1RXHW4pm7DpiacvhoMjwvhs4U5atda9PVM", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1GKQNxR4iRvER54c7Be2TcYPP18fWQqB88", + "decimals": 6, "symbol": "DRG", - "address": "KT1Kiik6bpYEiRb5fQRj2gFHd4keRSGSikxU", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "3.386517", - "tokenPool": "21.282065159000000000000000000000000000", - "address": "KT1J2LLd59gTRWB2dM8vmun5fxSX8m3qBurf", - "sharesTotal": "8474067", - "midPrice": "0.159125", - "token": { - "address": "KT1Kiik6bpYEiRb5fQRj2gFHd4keRSGSikxU", - "decimals": 9, - "symbol": "DRG", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "BEEz", - "address": "KT1GAWT8469ueGEyzWyEgXtJJetgQEeZFnE2", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "3.272823", - "tokenPool": "4407.190000000000000000000000000000000000", - "address": "KT1A4tYKJDJHrLonvp4qkJpZz5fkoWcAxMxW", - "sharesTotal": "725183", - "midPrice": "0.000743", - "token": { - "address": "KT1GAWT8469ueGEyzWyEgXtJJetgQEeZFnE2", - "decimals": 2, - "symbol": "BEEz", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "CERVEZA", - "address": "KT1AJkR5vBbEHUbSEEGHaFMQm1puTBm5an5T", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "3.136174", - "tokenPool": "10610.195307000000000000000000000000000000", - "address": "KT1XqWG7VS4MkEuCpJNyobGQkN8L3uvf5gUB", - "sharesTotal": "124460357", - "midPrice": "0.000296", - "token": { - "address": "KT1AJkR5vBbEHUbSEEGHaFMQm1puTBm5an5T", - "decimals": 6, - "symbol": "CERVEZA", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "MEL", - "address": "KT19mgJ3sCytBWXzZ1xgkZ7UMZS4HPKyGNo7", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "3.036560", - "tokenPool": "6.624520000000000000000000000000000000", - "address": "KT1BsDKTXBiYck85fJnoDzedyKKNtMuC9B9h", - "sharesTotal": "2000000", - "midPrice": "0.458382", - "token": { - "address": "KT19mgJ3sCytBWXzZ1xgkZ7UMZS4HPKyGNo7", - "decimals": 6, - "symbol": "MEL", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "PONZI", - "address": "KT1PLKdq3qCkBeanToghBFaE4MGXbXQAJt6c", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "2.899430", - "tokenPool": "2017571918.675047610000000000000000000000000000", - "address": "KT18rgqH7c4jEUoaoNNirswDab9naUvQmWsU", - "sharesTotal": "23296204217", - "midPrice": "0.000000", - "token": { - "address": "KT1PLKdq3qCkBeanToghBFaE4MGXbXQAJt6c", - "decimals": 8, - "symbol": "PONZI", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "RTT", - "address": "KT1JG7MKVa2Pba2Q2VwB2TZLY9ZTKh9csC1E", + "standard": "fa2", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "FUCKS", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 2, + "address": "KT1GhX6MzTHKcjkMTg1mwCPzam12HRjsp6Sf", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "24.885037", + "tokenPool": "437.380000000000000000000000000000000000", + "address": "KT1FjyTrWzCqszpPanj1inzDm4nRnW6AJf4U", + "sharesTotal": "10386637", + "midPrice": "0.056896", + "token": { + "address": "KT1GhX6MzTHKcjkMTg1mwCPzam12HRjsp6Sf", + "decimals": 2, + "symbol": "FUCKS", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "2.745180", - "tokenPool": "38128.500000000000000000000000000000000000", - "address": "KT1QoKSXVnvytnkbMLu8Nqh9vH9qPdtvxR6K", - "sharesTotal": "1002716", - "midPrice": "0.000072", - "token": { - "address": "KT1JG7MKVa2Pba2Q2VwB2TZLY9ZTKh9csC1E", - "decimals": 2, - "symbol": "RTT", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "SHR", - "address": "KT1C9L6o5ZYdRWc9iAgEsVBfpe3wKFop31hf", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "2.489244", - "tokenPool": "3659046.720812110000000000000000000000000000", - "address": "KT1EMkmDUTy623xQRwR3Q2ZNCXK6mCmBadak", - "sharesTotal": "290820258", - "midPrice": "0.000001", - "token": { - "address": "KT1C9L6o5ZYdRWc9iAgEsVBfpe3wKFop31hf", - "decimals": 8, - "symbol": "SHR", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "CLOUD", - "address": "KT1JXc6JfPrgCzLHoQTsGJGC19PDvDNuRSm6", + "standard": "fa2", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "GHST", + "thumbnailUri": "https://ipfs.io/ipfs/QmNo5dyUEzJsVRYaqRHLsPq8K1JzJ6TcZvPQzyAvZ71Nit?filename=ghostlogo.PNG", + "tokenId": 0, + "decimals": 6, + "address": "KT1GMM54j7d8chfEitzUNJ2rrsA9Rs1zGBmK", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "5.816292", + "tokenPool": "8183532.882506000000000000000000000000000000", + "address": "KT1X6MJFtzypK6yuMXzg4KQ9FJAccH8PazKz", + "sharesTotal": "20074525", + "midPrice": "0.000001", + "token": { + "address": "KT1GMM54j7d8chfEitzUNJ2rrsA9Rs1zGBmK", + "decimals": 6, + "symbol": "GHST", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "2.475305", - "tokenPool": "16185.933000000000000000000000000000000000", - "address": "KT1QFQtQPZZMUR4JtuQxq2fJk8uK7B66q2wK", - "sharesTotal": "1257705", - "midPrice": "0.000153", - "token": { - "address": "KT1JXc6JfPrgCzLHoQTsGJGC19PDvDNuRSm6", - "decimals": 3, - "symbol": "CLOUD", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "YEZ", - "address": "KT1SL8LGYTBrKjPydUawSFGZXWWVzwnkRjEN", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "2.404780", - "tokenPool": "405148.212012340000000000000000000000000000", - "address": "KT1TYMNmRjbTpqdTz4hAwbJD9Now3Kxv2ycz", - "sharesTotal": "97886631", - "midPrice": "0.000006", - "token": { - "address": "KT1SL8LGYTBrKjPydUawSFGZXWWVzwnkRjEN", - "decimals": 8, - "symbol": "YEZ", - "tokenId": 0, - "standard": "fa12" - } - } - ] - }, - { - "symbol": "V", + "standard": "fa2", + "thumbnailUri": "https://ipfs.io/ipfs/QmNo5dyUEzJsVRYaqRHLsPq8K1JzJ6TcZvPQzyAvZ71Nit?filename=ghostlogo.PNG" + } + } + ] + }, + { + "symbol": "V", + "thumbnailUri": "https://upload.wikimedia.org/wikipedia/en/thumb/b/ba/NosferatuShadow.jpg/220px-NosferatuShadow.jpg", + "tokenId": 0, + "decimals": 2, + "address": "KT1QQPYLhqHSkJQNYdLQuNAw5uYkQbJ1s2Jw", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "1.164897", + "tokenPool": "348.170000000000000000000000000000000000", + "address": "KT1KQaVBxVfS1XGLk7sHZgQ6RjFGCpz2br3b", + "sharesTotal": "2008638", + "midPrice": "0.003346", + "token": { "address": "KT1QQPYLhqHSkJQNYdLQuNAw5uYkQbJ1s2Jw", + "decimals": 2, + "symbol": "V", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "2.372074", - "tokenPool": "168.970000000000000000000000000000000000", - "address": "KT1KQaVBxVfS1XGLk7sHZgQ6RjFGCpz2br3b", - "sharesTotal": "2000000", - "midPrice": "0.014038", - "token": { - "address": "KT1QQPYLhqHSkJQNYdLQuNAw5uYkQbJ1s2Jw", - "decimals": 2, - "symbol": "V", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "FWA", - "address": "KT1RHoasnafRATyhvELE1d2XfrgZPSDTFPEn", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "2.339587", - "tokenPool": "466918.586503000000000000000000000000000000", - "address": "KT1B4zqgj7HKvDcHZ2n4f6EN1XMHosuUaeiY", - "sharesTotal": "46218961", - "midPrice": "0.000005", - "token": { - "address": "KT1RHoasnafRATyhvELE1d2XfrgZPSDTFPEn", - "decimals": 6, - "symbol": "FWA", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "NOLA", - "address": "KT1SrP7phqe9meFbMF4Z2YsSq3XuLU1mw9BM", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "2.137222", - "tokenPool": "627.498817000000000000000000000000000000", - "address": "KT1Fm5fS6VhFyE9wgopXcoQ3Nyb5awLY2sQH", - "sharesTotal": "36085852", - "midPrice": "0.003406", - "token": { - "address": "KT1SrP7phqe9meFbMF4Z2YsSq3XuLU1mw9BM", - "decimals": 6, - "symbol": "NOLA", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "BALEC", - "address": "KT1LLuto9MVbAPLGEjq91LbfXGt44SVcD3r4", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "2.042234", - "tokenPool": "911016.810120000000000000000000000000000000", - "address": "KT1Qd3TGH4B9hJEAKc4TeRJr4HsfSKLF99P3", - "sharesTotal": "1360666", - "midPrice": "0.000002", - "token": { - "address": "KT1LLuto9MVbAPLGEjq91LbfXGt44SVcD3r4", - "decimals": 5, - "symbol": "BALEC", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "ASADA", - "address": "KT1TCPf4DjgsseHj8ixRnCBgToqZbdFHQtPA", + "standard": "fa2", + "thumbnailUri": "https://upload.wikimedia.org/wikipedia/en/thumb/b/ba/NosferatuShadow.jpg/220px-NosferatuShadow.jpg" + } + } + ] + }, + { + "symbol": "OBJKT", + "thumbnailUri": "ipfs://QmNrhZHUaEqxhyLfqoq1mtHSipkWHeT31LNHb1QEbDHgnc", + "tokenId": 19059, + "decimals": 0, + "address": "KT1RJ6PbjHpwc3M5rw5s2Nbmefwbuwbdxton", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1Np7wGxpgmBjCuh9PFG27LzLiEx1f8sUtq", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1RJ6PbjHpwc3M5rw5s2Nbmefwbuwbdxton", + "decimals": 0, + "symbol": "OBJKT", + "tokenId": 19059, + "standard": "fa2", + "thumbnailUri": "ipfs://QmNrhZHUaEqxhyLfqoq1mtHSipkWHeT31LNHb1QEbDHgnc" + } + } + ] + }, + { + "symbol": "ALIEN", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmeDkTEGfV9j2bEuU7K65Lr9tXTPJRpJf3GZnudnxFWDFj", + "tokenId": 0, + "decimals": 6, + "address": "KT1GbJNS7XrRdJWgFdaXR1NUqf9icKNA8ecv", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1NXBYPKKmVbEJer8Jk4fZ3Q7WaLGY58CmH", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1GbJNS7XrRdJWgFdaXR1NUqf9icKNA8ecv", + "decimals": 6, + "symbol": "ALIEN", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "1.900267", - "tokenPool": "69310650.827690000000000000000000000000000000", - "address": "KT1GesE2kX6QcPF5bxyvGHW7fhDGYU6aKi7w", - "sharesTotal": "90742388", - "midPrice": "0.000000", - "token": { - "address": "KT1TCPf4DjgsseHj8ixRnCBgToqZbdFHQtPA", - "decimals": 6, - "symbol": "ASADA", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "CATNIP", - "address": "KT1KNmSyKZQwZ1mEKJcn4mBbfYYLcVKWWi5V", + "standard": "fa2", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmeDkTEGfV9j2bEuU7K65Lr9tXTPJRpJf3GZnudnxFWDFj" + } + } + ] + }, + { + "symbol": "OBJKT", + "thumbnailUri": "ipfs://QmNrhZHUaEqxhyLfqoq1mtHSipkWHeT31LNHb1QEbDHgnc", + "tokenId": 19062, + "decimals": 0, + "address": "KT1RJ6PbjHpwc3M5rw5s2Nbmefwbuwbdxton", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1SamzaXd2qMYa5aezqUye1VWBHr6dMjwGX", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1RJ6PbjHpwc3M5rw5s2Nbmefwbuwbdxton", + "decimals": 0, + "symbol": "OBJKT", + "tokenId": 19062, + "standard": "fa2", + "thumbnailUri": "ipfs://QmNrhZHUaEqxhyLfqoq1mtHSipkWHeT31LNHb1QEbDHgnc" + } + } + ] + }, + { + "symbol": "MERC", + "thumbnailUri": "https://static.tvtropes.org/pmwiki/pub/images/mercury_2008.png", + "tokenId": 0, + "decimals": 8, + "address": "KT1E6Utp7jQ8pmXTPuDaFtirokLdwfZKdsKB", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.012305", + "tokenPool": "786.082781600000000000000000000000000000", + "address": "KT1CPxq4nUsiZqvjxddj8qEkakxS4JzU6BML", + "sharesTotal": "3019774", + "midPrice": "0.000016", + "token": { + "address": "KT1E6Utp7jQ8pmXTPuDaFtirokLdwfZKdsKB", + "decimals": 8, + "symbol": "MERC", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://static.tvtropes.org/pmwiki/pub/images/mercury_2008.png" + } + } + ] + }, + { + "symbol": "HUNC", + "thumbnailUri": "https://i.imgur.com/dcErUZK.png", + "tokenId": 0, + "decimals": 2, + "address": "KT1Vbrnm5HHc1j6ePoxJWyY92cxgVLkMUi9Y", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "8.632036", + "tokenPool": "13802.170000000000000000000000000000000000", + "address": "KT1Ji39TrkVBd6L2SL7H4u9yvA1sPuSygthq", + "sharesTotal": "10785208", + "midPrice": "0.000625", + "token": { + "address": "KT1Vbrnm5HHc1j6ePoxJWyY92cxgVLkMUi9Y", + "decimals": 2, + "symbol": "HUNC", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "1.775042", - "tokenPool": "12710748.425000000000000000000000000000000000", - "address": "KT1FQVcuQjpxD2DBn94LypuHD8ixVL167m3Y", - "sharesTotal": "138230815", - "midPrice": "0.000000", - "token": { - "address": "KT1KNmSyKZQwZ1mEKJcn4mBbfYYLcVKWWi5V", - "decimals": 3, - "symbol": "CATNIP", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "SKPx", - "address": "KT18m6tZApSYdiicxNFP9PUinG6nsPri9jcS", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "1.688939", - "tokenPool": "28669.513803361800000000000000000000000000", - "address": "KT1QcjAPGokiVqeGDTJZuJuBvRJPtWtqSJFG", - "sharesTotal": "2174899", - "midPrice": "0.000059", - "token": { - "address": "KT18m6tZApSYdiicxNFP9PUinG6nsPri9jcS", - "decimals": 10, - "symbol": "SKPx", - "tokenId": 0, - "standard": "fa2" - } - } - ] - } - ] + "standard": "fa2", + "thumbnailUri": "https://i.imgur.com/dcErUZK.png" + } + } + ] + }, + { + "symbol": "R&M", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmaoF38k938BgQSpYsj5jGMFKWPdAospxNy6s78GgNhzLY", + "tokenId": 0, + "decimals": 9, + "address": "KT1BV7A1LcEWtiCE7cYkDF6UcLFCVvKnL8gy", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.258451", + "tokenPool": "1715.437937040000000000000000000000000000", + "address": "KT1C8K7dVQfC83PngySbnytpFbPwVSiSwzbP", + "sharesTotal": "1846992", + "midPrice": "0.000151", + "token": { + "address": "KT1BV7A1LcEWtiCE7cYkDF6UcLFCVvKnL8gy", + "decimals": 9, + "symbol": "R&M", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmaoF38k938BgQSpYsj5jGMFKWPdAospxNy6s78GgNhzLY" + } + } + ] + }, + { + "symbol": "ptai", + "thumbnailUri": "http://painters.ai/ptai.png", + "tokenId": 0, + "decimals": 4, + "address": "KT1AyVdjSZffJtiMkdwwztEK7ePVyTogzogr", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "6.996793", + "tokenPool": "68.823300000000000000000000000000000000", + "address": "KT1TtpMxWwAR41b8f8k4ujqjd8YoWvYDR5tN", + "sharesTotal": "2173096", + "midPrice": "0.101663", + "token": { + "address": "KT1AyVdjSZffJtiMkdwwztEK7ePVyTogzogr", + "decimals": 4, + "symbol": "ptai", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "http://painters.ai/ptai.png" + } + } + ] + }, + { + "symbol": "BTC", + "thumbnailUri": "https://cloudflare-ipfs.com/ipfs/QmY3ydEhY4pUgSNBTVfwJ9WgoC7WPWLA2x6ZGT7ib5soD2", + "tokenId": 0, + "decimals": 6, + "address": "KT19Fd3ErPBypy4pau4Ykn2XsyKkTUCy6brt", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "3.660550", + "tokenPool": "2478162.095067000000000000000000000000000000", + "address": "KT1E9tnrFzLiU3o8vo5GsSwyEHg7i9BYX24j", + "sharesTotal": "29637890", + "midPrice": "0.000001", + "token": { + "address": "KT19Fd3ErPBypy4pau4Ykn2XsyKkTUCy6brt", + "decimals": 6, + "symbol": "BTC", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://cloudflare-ipfs.com/ipfs/QmY3ydEhY4pUgSNBTVfwJ9WgoC7WPWLA2x6ZGT7ib5soD2" + } + } + ] + }, + { + "symbol": "TOKENS", + "thumbnailUri": "https://user-images.githubusercontent.com/576184/118975372-3e72fc00-b974-11eb-9fa8-f0e86f4b1e31.png", + "tokenId": 0, + "decimals": 2, + "address": "KT1Gf5JGXC1M8GMji58pKraXiRLkzW2NRK1s", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "59.348030", + "tokenPool": "95554.750000000000000000000000000000000000", + "address": "KT1ANEFHasacTTZxGPmQmZo7spj5YuLE6TL4", + "sharesTotal": "10330615", + "midPrice": "0.000621", + "token": { + "address": "KT1Gf5JGXC1M8GMji58pKraXiRLkzW2NRK1s", + "decimals": 2, + "symbol": "TOKENS", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://user-images.githubusercontent.com/576184/118975372-3e72fc00-b974-11eb-9fa8-f0e86f4b1e31.png" + } + } + ] + }, + { + "symbol": "uUSD", + "thumbnailUri": "ipfs://QmbvhanNCxydZEbGu1RdqkG3LcpNGv7XYsCHgzWBXnmxRd", + "tokenId": 0, + "decimals": 12, + "address": "KT1QTcAXeefhJ3iXLurRt81WRKdv7YqyYFmo", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.013000", + "tokenPool": "0.023094320208000000000000000000000000", + "address": "KT1DB4UrjiiqVJK8JCGDmzMe2GvhWSamLeyU", + "sharesTotal": "10000", + "midPrice": "0.562909", + "token": { + "address": "KT1QTcAXeefhJ3iXLurRt81WRKdv7YqyYFmo", + "decimals": 12, + "symbol": "uUSD", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "ipfs://QmbvhanNCxydZEbGu1RdqkG3LcpNGv7XYsCHgzWBXnmxRd" + } + } + ] + }, + { + "symbol": "RVN", + "thumbnailUri": "https://imgpile.com/images/NnJ082.png", + "tokenId": 0, + "decimals": 18, + "address": "KT1JS6RrhJSbJhuYTdpUr8RA577gGrkbLj7E", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "28.104843", + "tokenPool": "4016305.354959882138819279000000000000000000", + "address": "KT1U21k5fMPxeZwj7ogASXyAwUHVT89U9X2S", + "sharesTotal": "103633536", + "midPrice": "0.000007", + "token": { + "address": "KT1JS6RrhJSbJhuYTdpUr8RA577gGrkbLj7E", + "decimals": 18, + "symbol": "RVN", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://imgpile.com/images/NnJ082.png" + } + } + ] + }, + { + "symbol": "YOU", + "thumbnailUri": "ipfs://QmYAJaJvEJuwvMEgRbBoAUKrTxRTT22nCC9RuY7Jy4L4Gc", + "tokenId": 0, + "decimals": 12, + "address": "KT1J68zNxjpCdvJTBuQXC77BgivbF1Hbkz7b", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.030521", + "tokenPool": "0.000328592766000000000000000000000000", + "address": "KT1A7LjskJkSTZwJaFBPYv34ZJJ46kB3PkxU", + "sharesTotal": "10000", + "midPrice": "92.883968", + "token": { + "address": "KT1J68zNxjpCdvJTBuQXC77BgivbF1Hbkz7b", + "decimals": 12, + "symbol": "YOU", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "ipfs://QmYAJaJvEJuwvMEgRbBoAUKrTxRTT22nCC9RuY7Jy4L4Gc" + } + } + ] + } + ] } -} \ No newline at end of file + } \ No newline at end of file diff --git a/Tests/KukaiCoreSwiftTests/Stubs/dipdup_dex_exchange_response_3.json b/Tests/KukaiCoreSwiftTests/Stubs/dipdup_dex_exchange_response_3.json index 47b09d1d..48568ffd 100644 --- a/Tests/KukaiCoreSwiftTests/Stubs/dipdup_dex_exchange_response_3.json +++ b/Tests/KukaiCoreSwiftTests/Stubs/dipdup_dex_exchange_response_3.json @@ -1,2236 +1,2506 @@ { "data": { - "token": [ - { - "symbol": "Chunk", - "address": "KT1Az4udnGnJTaGfU4X3oYqKoJ2tQUMBDPSt", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "1.514491", - "tokenPool": "668630.174964660000000000000000000000000000", - "address": "KT1DiGxvRshVMn2p1KRfew6fnP9hpHT212MX", - "sharesTotal": "1000000", - "midPrice": "0.000002", - "token": { - "address": "KT1Az4udnGnJTaGfU4X3oYqKoJ2tQUMBDPSt", - "decimals": 8, - "symbol": "Chunk", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "FAN8", - "address": "KT1BWvkCamCVgAbSJwZn2hriECV2uChm1Hn8", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "1.511851", - "tokenPool": "81.183676000000000000000000000000000000", - "address": "KT1M7gEK9tQaycUi5BsNj64kdNVCB8Vq4nNW", - "sharesTotal": "1814998", - "midPrice": "0.018623", - "token": { - "address": "KT1BWvkCamCVgAbSJwZn2hriECV2uChm1Hn8", - "decimals": 6, - "symbol": "FAN8", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "DJKHALED", - "address": "KT1N77LZAWvhEpMnq8rLhA3vpNcbXGsGqBpW", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "1.498945", - "tokenPool": "430987.041000000000000000000000000000000000", - "address": "KT1WnUVk9Z1Ua2UEHEraNRw48LYkmPvHbJwG", - "sharesTotal": "3128723", - "midPrice": "0.000003", - "token": { - "address": "KT1N77LZAWvhEpMnq8rLhA3vpNcbXGsGqBpW", - "decimals": 3, - "symbol": "DJKHALED", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "TITz", - "address": "KT1AGhcM4GAEo2obsFjuEERcGkURdDFUW86h", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "1.413855", - "tokenPool": "149751.670000000000000000000000000000000000", - "address": "KT1BNRefGboWR4p2SFwDDTosjnPKPL9hVk3q", - "sharesTotal": "1811490", - "midPrice": "0.000009", - "token": { - "address": "KT1AGhcM4GAEo2obsFjuEERcGkURdDFUW86h", - "decimals": 2, - "symbol": "TITz", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "chunc", - "address": "KT1ELJHUaJsDk9cvXcKESMKW9sXFNrRLohxG", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "1.364211", - "tokenPool": "735672.756682800000000000000000000000000000", - "address": "KT1LXkyMvjuTk2ugEA7UsRmEWHautLH147ez", - "sharesTotal": "1000000", - "midPrice": "0.000002", - "token": { - "address": "KT1ELJHUaJsDk9cvXcKESMKW9sXFNrRLohxG", - "decimals": 7, - "symbol": "chunc", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "PUMP", - "address": "KT1Qryr8PrH3YGcDbbddwvp8X1acQ5v2zKhA", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "1.270217", - "tokenPool": "194030988.823437590000000000000000000000000000", - "address": "KT1Rj4wyhTBrCJGXJvR8FxXgt5TpuqHEexAW", - "sharesTotal": "16259435", - "midPrice": "0.000000", - "token": { - "address": "KT1Qryr8PrH3YGcDbbddwvp8X1acQ5v2zKhA", - "decimals": 8, - "symbol": "PUMP", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "Bezos", - "address": "KT1KdYiNTTByYQp7R3gxjc9K5rhQ2qtYdDTR", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "1.262971", - "tokenPool": "39667963.907993100000000000000000000000000000", - "address": "KT1DbjgC2sGUQHLpfuMEVvErWVsaKu5K6Pjo", - "sharesTotal": "7011145", - "midPrice": "0.000000", - "token": { - "address": "KT1KdYiNTTByYQp7R3gxjc9K5rhQ2qtYdDTR", - "decimals": 7, - "symbol": "Bezos", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "OBJKT", - "address": "KT1RJ6PbjHpwc3M5rw5s2Nbmefwbuwbdxton", - "tokenId": 215065, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "1.213607", - "tokenPool": "191.000000000000000000000000000000000000", - "address": "KT1D8zpJL6f24KmGFMwVgdohtwKAK6nir4tc", - "sharesTotal": "14647935", - "midPrice": "0.006354", - "token": { - "address": "KT1RJ6PbjHpwc3M5rw5s2Nbmefwbuwbdxton", - "decimals": 0, - "symbol": "OBJKT", - "tokenId": 215065, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "NFA", - "address": "KT1BAPFGXsXUpEAiBmTHkmTv8KGAqt5ZgwXZ", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "1.168926", - "tokenPool": "16576.553208000000000000000000000000000000", - "address": "KT1ULad9tYBY39FT8K1Dgtha7jD3qpygbLPG", - "sharesTotal": "135864212", - "midPrice": "0.000071", - "token": { - "address": "KT1BAPFGXsXUpEAiBmTHkmTv8KGAqt5ZgwXZ", - "decimals": 6, - "symbol": "NFA", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "Bezos", - "address": "KT1Ai2uHzf1aj5ukdwbyL82jQV4JVdFtT3nY", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "1.112983", - "tokenPool": "900001.451132600000000000000000000000000000", - "address": "KT1UM7LbQuZ5e26RgJ97aRLJ3ymmBUq8zjmB", - "sharesTotal": "1000000", - "midPrice": "0.000001", - "token": { - "address": "KT1Ai2uHzf1aj5ukdwbyL82jQV4JVdFtT3nY", - "decimals": 7, - "symbol": "Bezos", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "SEBMOON", - "address": "KT1PJJpsEmSz1TjXqbTMpMaqydHVhN2jpeNZ", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "1.063907", - "tokenPool": "195171.726400000000000000000000000000000000", - "address": "KT1VDb2YFRrXFULp6gWkDAP1f2nhezQ21dXT", - "sharesTotal": "3186350", - "midPrice": "0.000005", - "token": { - "address": "KT1PJJpsEmSz1TjXqbTMpMaqydHVhN2jpeNZ", - "decimals": 4, - "symbol": "SEBMOON", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "CLEO", - "address": "KT1VEe2PES4F9nqsgQHdonPsFkTvKXLbbdha", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.871266", - "tokenPool": "721705.589000000000000000000000000000000000", - "address": "KT1R8eiRrSoSHufHXPqevZZYEUVzBxhcdenP", - "sharesTotal": "24527930", - "midPrice": "0.000001", - "token": { - "address": "KT1VEe2PES4F9nqsgQHdonPsFkTvKXLbbdha", - "decimals": 3, - "symbol": "CLEO", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "TUIT", - "address": "KT1J7Gwoks1KZ8jQ28mH2L9Mz3wz9L32PX4G", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.859451", - "tokenPool": "434.420000000000000000000000000000000000", - "address": "KT1RW6GSX9rJVgmw6XGSMkJJaep9XHyAzuAp", - "sharesTotal": "1920794", - "midPrice": "0.001978", - "token": { - "address": "KT1J7Gwoks1KZ8jQ28mH2L9Mz3wz9L32PX4G", - "decimals": 2, - "symbol": "TUIT", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "ASH", - "address": "KT1EVPNZtekBirJhvALU5gNJS2F3ibWZXnpd", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.854849", - "tokenPool": "3.185145000000000000000000000000000000", - "address": "KT1QwyZqLtSmb1kTFxs4rzEGaJac3RmuGwzh", - "sharesTotal": "1618703", - "midPrice": "0.268386", - "token": { - "address": "KT1EVPNZtekBirJhvALU5gNJS2F3ibWZXnpd", - "decimals": 6, - "symbol": "ASH", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "Flood", - "address": "KT1BXi2AgdykJ4vVmEqKZfWznBrJ6Wn2pEGL", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.849671", - "tokenPool": "401067.226260000000000000000000000000000000", - "address": "KT19RC3fS8824Z9T4cfLguZuo4gJzCTMbLND", - "sharesTotal": "4466246", - "midPrice": "0.000002", - "token": { - "address": "KT1BXi2AgdykJ4vVmEqKZfWznBrJ6Wn2pEGL", - "decimals": 5, - "symbol": "Flood", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "FART", - "address": "KT1Sn3eNrZ2uATmy7ZGTKZBCtyeVERNqkQFw", + "token": [ + { + "symbol": "uUSD", + "thumbnailUri": "ipfs://QmbvhanNCxydZEbGu1RdqkG3LcpNGv7XYsCHgzWBXnmxRd", + "tokenId": 0, + "decimals": 12, + "address": "KT1XRPEPXbZK25r3Htzp2o1x7xdMMmfocKNW", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "13068.073815", + "tokenPool": "12475.899391153590000000000000000000000000", + "address": "KT1EtjRRCBC2exyCRXz8UfV7jz7svnkqi7di", + "sharesTotal": "4748218511", + "midPrice": "1.047465", + "token": { + "address": "KT1XRPEPXbZK25r3Htzp2o1x7xdMMmfocKNW", + "decimals": 12, + "symbol": "uUSD", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.789115", - "tokenPool": "25246682128.307520000000000000000000000000000000", - "address": "KT1GcQsnT8hU8EryLzTjoKm4vZhNbcXYM29L", - "sharesTotal": "123478263", - "midPrice": "0.000000", - "token": { - "address": "KT1Sn3eNrZ2uATmy7ZGTKZBCtyeVERNqkQFw", - "decimals": 6, - "symbol": "FART", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "TACOS", - "address": "KT1TxyzQh7AqVHjjnPAAakuBwiCaWvVLp2pT", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.782674", - "tokenPool": "1017366.430000000000000000000000000000000000", - "address": "KT1ERtmznJQj4JpX7q6dN3JLJXaDTnZkD7e4", - "sharesTotal": "2715521", - "midPrice": "0.000001", - "token": { - "address": "KT1TxyzQh7AqVHjjnPAAakuBwiCaWvVLp2pT", - "decimals": 2, - "symbol": "TACOS", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "TQLA", - "address": "KT1SrgAVEF2jce4c2p1JAykWSGGzRgDwqmuL", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.773316", - "tokenPool": "1488273.120340470000000000000000000000000000", - "address": "KT1SKEp4kiJSSfKG6FJiRV3ckympSuLhfCH6", - "sharesTotal": "6591955", - "midPrice": "0.000001", - "token": { - "address": "KT1SrgAVEF2jce4c2p1JAykWSGGzRgDwqmuL", - "decimals": 8, - "symbol": "TQLA", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "gDAO", - "address": "KT1HU2eCMzZhSHUpuBQjaN3L6un77iQvbZgy", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.758875", - "tokenPool": "79.399064000000000000000000000000000000", - "address": "KT198myhugqAVvtNbYgN4sBKMFRYBvprcKHf", - "sharesTotal": "767675", - "midPrice": "0.009558", - "token": { - "address": "KT1HU2eCMzZhSHUpuBQjaN3L6un77iQvbZgy", - "decimals": 6, - "symbol": "gDAO", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "RDL", - "address": "KT19wwvUweoZCTWcwkHt7espqpmGuBM5q62v", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.727861", - "tokenPool": "1086481.800000000000000000000000000000000000", - "address": "KT18qZcc2GRNjp74ipqmv8jReP3QXudv3xsd", - "sharesTotal": "27488614", - "midPrice": "0.000001", - "token": { - "address": "KT19wwvUweoZCTWcwkHt7espqpmGuBM5q62v", - "decimals": 2, - "symbol": "RDL", - "tokenId": 0, - "standard": "fa12" - } - } - ] - }, - { - "symbol": "KIND", - "address": "KT1RVWLYn8zhrG6KKR3PDMAxeHV8DVrDXSTy", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.681093", - "tokenPool": "355322.307661000000000000000000000000000000", - "address": "KT1W2NKgcPdTh7dBtVrNgP2NEPQKCdwTxGe9", - "sharesTotal": "9634992", - "midPrice": "0.000002", - "token": { - "address": "KT1RVWLYn8zhrG6KKR3PDMAxeHV8DVrDXSTy", - "decimals": 6, - "symbol": "KIND", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "TZF", - "address": "KT1NGeaqJ5Cd8CkiazBsjQw1fWyWYhXr28v4", + "standard": "fa2", + "thumbnailUri": "ipfs://QmbvhanNCxydZEbGu1RdqkG3LcpNGv7XYsCHgzWBXnmxRd" + } + } + ] + }, + { + "symbol": "YOU", + "thumbnailUri": "ipfs://QmYAJaJvEJuwvMEgRbBoAUKrTxRTT22nCC9RuY7Jy4L4Gc", + "tokenId": 0, + "decimals": 12, + "address": "KT1Xobej4mc6XgEjDoJoHtTKgbD1ELMvcQuL", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "121806.428631", + "tokenPool": "123380.235379221792000000000000000000000000", + "address": "KT1PL1YciLdwMbydt21Ax85iZXXyGSrKT2BE", + "sharesTotal": "52814538244", + "midPrice": "0.987244", + "token": { + "address": "KT1Xobej4mc6XgEjDoJoHtTKgbD1ELMvcQuL", + "decimals": 12, + "symbol": "YOU", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.612613", - "tokenPool": "1048.415090000000000000000000000000000000", - "address": "KT1FgFdoW8FRrhJznPNVTuRLfrt4fL6JwuzQ", - "sharesTotal": "21971464", - "midPrice": "0.000584", - "token": { - "address": "KT1NGeaqJ5Cd8CkiazBsjQw1fWyWYhXr28v4", - "decimals": 6, - "symbol": "TZF", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "thcSEEDs", - "address": "KT1NviVpi1V6ZxVMhSsTcHHaNdK2YjSQRWc8", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.599124", - "tokenPool": "81621091.140100000000000000000000000000000000", - "address": "KT1KHAy21tZTsG9TXVafEVfUgTqeLqg7Lc7M", - "sharesTotal": "6891310", - "midPrice": "0.000000", - "token": { - "address": "KT1NviVpi1V6ZxVMhSsTcHHaNdK2YjSQRWc8", - "decimals": 4, - "symbol": "thcSEEDs", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "HERO", - "address": "KT1UYd3dEhE4kXPjr39GwhgDgaWawTV7HpDR", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.548808", - "tokenPool": "0.184901390000000000000000000000000000", - "address": "KT1HuvTLksDHUZYs12MZUbhHHR1SUdMA1NuS", - "sharesTotal": "10000000", - "midPrice": "2.968112", - "token": { - "address": "KT1UYd3dEhE4kXPjr39GwhgDgaWawTV7HpDR", - "decimals": 8, - "symbol": "HERO", - "tokenId": 0, - "standard": "fa12" - } - } - ] - }, - { - "symbol": "BOMB", - "address": "KT1AASSrwkXNKnHmwkmEGJ54bSnFvf4YWMHd", + "standard": "fa2", + "thumbnailUri": "ipfs://QmYAJaJvEJuwvMEgRbBoAUKrTxRTT22nCC9RuY7Jy4L4Gc" + } + } + ] + }, + { + "symbol": "WOJAK", + "thumbnailUri": "https://upload.wikimedia.org/wikipedia/ru/4/4d/Wojak.png", + "tokenId": 0, + "decimals": 8, + "address": "KT1DH7nnWLSBM5f4i8KehH1F5nMvDvknXgJj", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "139.599670", + "tokenPool": "1312.264483710000000000000000000000000000", + "address": "KT1RyjnbuY3WNqQ29jarPynBQMqa5JyvQNbA", + "sharesTotal": "134372304", + "midPrice": "0.106381", + "token": { + "address": "KT1DH7nnWLSBM5f4i8KehH1F5nMvDvknXgJj", + "decimals": 8, + "symbol": "WOJAK", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://upload.wikimedia.org/wikipedia/ru/4/4d/Wojak.png" + } + } + ] + }, + { + "symbol": "BOGDANOFF", + "thumbnailUri": "https://i.imgur.com/6IUT547.png", + "tokenId": 0, + "decimals": 4, + "address": "KT1QaHZUKx3vZEwjSD4r5KpSkKUdHyg2HMCC", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "1.342783", + "tokenPool": "0.017200000000000000000000000000000000", + "address": "KT1SFefVtCDkAPj2KtiDm3Rc3rdLyK7Y5stP", + "sharesTotal": "1500000", + "midPrice": "78.068779", + "token": { + "address": "KT1QaHZUKx3vZEwjSD4r5KpSkKUdHyg2HMCC", + "decimals": 4, + "symbol": "BOGDANOFF", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.imgur.com/6IUT547.png" + } + } + ] + }, + { + "symbol": "SCAM", + "thumbnailUri": "https://www.onlygfx.com/wp-content/uploads/2020/05/scam-stamp-7.png", + "tokenId": 0, + "decimals": 8, + "address": "KT1P2RmgwuYXwDrprrcBVX6YNHmFruwQKSwE", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1UWJJB4KsAQgFCcVjDZAF8jzb7ES8Dn4si", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1P2RmgwuYXwDrprrcBVX6YNHmFruwQKSwE", + "decimals": 8, + "symbol": "SCAM", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.541891", - "tokenPool": "20636.237780000000000000000000000000000000", - "address": "KT1QmrQm6mvPUJRL8FMjYRMm8kcdHP3rshWp", - "sharesTotal": "50840248", - "midPrice": "0.000026", - "token": { - "address": "KT1AASSrwkXNKnHmwkmEGJ54bSnFvf4YWMHd", - "decimals": 5, - "symbol": "BOMB", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "R&M", - "address": "KT1BV7A1LcEWtiCE7cYkDF6UcLFCVvKnL8gy", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.522374", - "tokenPool": "1581.238644067000000000000000000000000000", - "address": "KT1C8K7dVQfC83PngySbnytpFbPwVSiSwzbP", - "sharesTotal": "2522264", - "midPrice": "0.000330", - "token": { - "address": "KT1BV7A1LcEWtiCE7cYkDF6UcLFCVvKnL8gy", - "decimals": 9, - "symbol": "R&M", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "KLL", - "address": "KT1Td6a28ydPMXKJS5yS5Usadj4Qx5drsCfY", + "standard": "fa2", + "thumbnailUri": "https://www.onlygfx.com/wp-content/uploads/2020/05/scam-stamp-7.png" + } + } + ] + }, + { + "symbol": "SAT", + "thumbnailUri": "https://p1.pxfuel.com/preview/105/913/77/saturn-planet-surface-forward-royalty-free-thumbnail.jpg", + "tokenId": 0, + "decimals": 8, + "address": "KT1B6bmPvGZAmNT3qrkzwvmXDTnrvp7Lbxks", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.089848", + "tokenPool": "3010.191786720000000000000000000000000000", + "address": "KT1ATGWUqAASWRDP7reiUF5HHqMxd6RZqVim", + "sharesTotal": "894937", + "midPrice": "0.000030", + "token": { + "address": "KT1B6bmPvGZAmNT3qrkzwvmXDTnrvp7Lbxks", + "decimals": 8, + "symbol": "SAT", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.487408", - "tokenPool": "737021.043429540000000000000000000000000000", - "address": "KT1EWESqA7ZrHg9eLeioaGP84ETN9rpgnLKW", - "sharesTotal": "260669041", - "midPrice": "0.000001", - "token": { - "address": "KT1Td6a28ydPMXKJS5yS5Usadj4Qx5drsCfY", - "decimals": 8, - "symbol": "KLL", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "INDICA", - "address": "KT1MxjTwTB5nxuQ4LrtzPCyktBXMA5XJFe3N", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.467007", - "tokenPool": "1211443149.000000000000000000000000000000000000", - "address": "KT1NBKcXDwieEBusbguznQfziCAMh8nsgQTZ", - "sharesTotal": "375633", - "midPrice": "0.000000", - "token": { - "address": "KT1MxjTwTB5nxuQ4LrtzPCyktBXMA5XJFe3N", - "decimals": 0, - "symbol": "INDICA", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "BTC1", - "address": "KT1QdH9m19BLqSYgRN9jjBrgTmRTRRqi3PYm", + "standard": "fa2", + "thumbnailUri": "https://p1.pxfuel.com/preview/105/913/77/saturn-planet-surface-forward-royalty-free-thumbnail.jpg" + } + } + ] + }, + { + "symbol": "SDO", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmViyXEMezZQPvd8kisHo3RmDfJaiwEn4EvMnGz5RycarH", + "tokenId": 0, + "decimals": 6, + "address": "KT1LXup54FEkjwSSFFrEsA2iXQrpokphziKR", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "5.240571", + "tokenPool": "3125.426770000000000000000000000000000000", + "address": "KT1XYZcmMtVk6QfqKUQUTUt5F7tHxxzvw8Su", + "sharesTotal": "39358444", + "midPrice": "0.001677", + "token": { + "address": "KT1LXup54FEkjwSSFFrEsA2iXQrpokphziKR", + "decimals": 6, + "symbol": "SDO", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmViyXEMezZQPvd8kisHo3RmDfJaiwEn4EvMnGz5RycarH" + } + } + ] + }, + { + "symbol": "TZD", + "thumbnailUri": "https://i.imgur.com/X1Teagz.png", + "tokenId": 0, + "decimals": 8, + "address": "KT1RhRYoGmhDr4DShdggQqumRAhwAETxrs3t", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "3259.781217", + "tokenPool": "691144.571423180000000000000000000000000000", + "address": "KT1ERmjYo3hotAFmegVCJ2EAgUmc7RtXyV87", + "sharesTotal": "858860586", + "midPrice": "0.004716", + "token": { + "address": "KT1RhRYoGmhDr4DShdggQqumRAhwAETxrs3t", + "decimals": 8, + "symbol": "TZD", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.imgur.com/X1Teagz.png" + } + } + ] + }, + { + "symbol": "ETH", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/Qmb3Kms1fwFuuojNphKC16x7DgdrJcdP2MPiymdM1BH1hm", + "tokenId": 0, + "decimals": 6, + "address": "KT1LQTw7dtZDDDKexFDUJwBVZzZGa3sVVY5Z", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.063313", + "tokenPool": "5790.498175000000000000000000000000000000", + "address": "KT1AUtHePwMvqQcfvJdTfzKuUjc9j3GNKDPG", + "sharesTotal": "9312014", + "midPrice": "0.000011", + "token": { + "address": "KT1LQTw7dtZDDDKexFDUJwBVZzZGa3sVVY5Z", + "decimals": 6, + "symbol": "ETH", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.409993", - "tokenPool": "640898.994352000000000000000000000000000000", - "address": "KT1ATazaqB4cLQLpjSBUgKSJJwvd1tnkqmA5", - "sharesTotal": "7200922", - "midPrice": "0.000001", - "token": { - "address": "KT1QdH9m19BLqSYgRN9jjBrgTmRTRRqi3PYm", - "decimals": 6, - "symbol": "BTC1", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "ADA", - "address": "KT18qqxrNTpLEjZ1fmTDg7kJWJfCWPop8Uor", + "standard": "fa2", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/Qmb3Kms1fwFuuojNphKC16x7DgdrJcdP2MPiymdM1BH1hm" + } + } + ] + }, + { + "symbol": "NEC", + "thumbnailUri": "https://i.imgur.com/cBZ9mgC.png", + "tokenId": 0, + "decimals": 8, + "address": "KT1J3aVe2TMBu8depgu4Xkdy8e5wV323CCzQ", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "25.768598", + "tokenPool": "30178538.081189230000000000000000000000000000", + "address": "KT1CgC7Lq4YyMK27ZCULQk4YxNxq2zyeWNy1", + "sharesTotal": "121074072", + "midPrice": "0.000001", + "token": { + "address": "KT1J3aVe2TMBu8depgu4Xkdy8e5wV323CCzQ", + "decimals": 8, + "symbol": "NEC", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.imgur.com/cBZ9mgC.png" + } + } + ] + }, + { + "symbol": "CSC", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmZ96X5HgnX6qsZpZY2AzhD4Rsck888kAAmCjECTvMXcvy", + "tokenId": 0, + "decimals": 8, + "address": "KT1DnT2NsRZ4h2M3gAjZbbhaemVzpvjeNQF2", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1GxaBbv4tNyAYr6TiRKfVcpyFPjz1hurXF", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1DnT2NsRZ4h2M3gAjZbbhaemVzpvjeNQF2", + "decimals": 8, + "symbol": "CSC", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.376417", - "tokenPool": "613.163668000000000000000000000000000000", - "address": "KT1M3pnW1RFECAQQnifnLuJTbHHH5Ltqs3DP", - "sharesTotal": "5000000", - "midPrice": "0.000614", - "token": { - "address": "KT18qqxrNTpLEjZ1fmTDg7kJWJfCWPop8Uor", - "decimals": 6, - "symbol": "ADA", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "ETH", - "address": "KT1LQTw7dtZDDDKexFDUJwBVZzZGa3sVVY5Z", + "standard": "fa2", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmZ96X5HgnX6qsZpZY2AzhD4Rsck888kAAmCjECTvMXcvy" + } + } + ] + }, + { + "symbol": "APE", + "thumbnailUri": "https://rebrand.ly/pjnnoe1", + "tokenId": 0, + "decimals": 8, + "address": "KT1QDt84bd4YUfE3ZJQYAu2Ckb7ZYNaWytee", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "2.227574", + "tokenPool": "3855976580.945611400000000000000000000000000000", + "address": "KT1HsiFgxSPPziN2P7dXH99eNqbWEc2pqYVe", + "sharesTotal": "945280335397819", + "midPrice": "0.000000", + "token": { + "address": "KT1QDt84bd4YUfE3ZJQYAu2Ckb7ZYNaWytee", + "decimals": 8, + "symbol": "APE", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://rebrand.ly/pjnnoe1" + } + } + ] + }, + { + "symbol": "FART", + "thumbnailUri": "https://i.ibb.co/ys44Qm5/Pngaaa-com-704200.png", + "tokenId": 0, + "decimals": 6, + "address": "KT1Sn3eNrZ2uATmy7ZGTKZBCtyeVERNqkQFw", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "1.183819", + "tokenPool": "16845888605.713845000000000000000000000000000000", + "address": "KT1GcQsnT8hU8EryLzTjoKm4vZhNbcXYM29L", + "sharesTotal": "123478263", + "midPrice": "0.000000", + "token": { + "address": "KT1Sn3eNrZ2uATmy7ZGTKZBCtyeVERNqkQFw", + "decimals": 6, + "symbol": "FART", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.369887", - "tokenPool": "8253.558765000000000000000000000000000000", - "address": "KT1AUtHePwMvqQcfvJdTfzKuUjc9j3GNKDPG", - "sharesTotal": "26895836", - "midPrice": "0.000045", - "token": { - "address": "KT1LQTw7dtZDDDKexFDUJwBVZzZGa3sVVY5Z", - "decimals": 6, - "symbol": "ETH", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "rugDao", - "address": "KT1EZ5Kerx82fxsvPSnMKsnvPp7Yue9oHNRY", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.358651", - "tokenPool": "146.270000000000000000000000000000000000", - "address": "KT1D3tdqrEkcwKkhJso5jmrJiyiaNVWtYiFJ", - "sharesTotal": "49433", - "midPrice": "0.002452", - "token": { - "address": "KT1EZ5Kerx82fxsvPSnMKsnvPp7Yue9oHNRY", - "decimals": 2, - "symbol": "rugDao", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "wLEO", - "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", - "tokenId": 9, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.328305", - "tokenPool": "0.413937321823165883000000000000000000", - "address": "KT1MpRQvn2VRR26VJFPYUGcB8qqxBbXgk5xe", - "sharesTotal": "129017", - "midPrice": "0.793127", - "token": { - "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", - "decimals": 18, - "symbol": "wLEO", - "tokenId": 9, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "DRUM", - "address": "KT1DX7UdxtzW7bEBihW31kV8Ge4MojAgrLNW", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.325516", - "tokenPool": "84996.000000000000000000000000000000000000", - "address": "KT1RE81JDz4vLiExGyaQeQaicHAjdVfveqkL", - "sharesTotal": "16500040", - "midPrice": "0.000004", - "token": { - "address": "KT1DX7UdxtzW7bEBihW31kV8Ge4MojAgrLNW", - "decimals": 0, - "symbol": "DRUM", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "DEAL", + "standard": "fa2", + "thumbnailUri": "https://i.ibb.co/ys44Qm5/Pngaaa-com-704200.png" + } + } + ] + }, + { + "symbol": "REGI", + "thumbnailUri": "https://piensa.co/img/Screen_Shot_2021-06-11_at_3.44.12_PM.png", + "tokenId": 0, + "decimals": 4, + "address": "KT19N5AwdSar5acfVu16fBEjtAcAHTfHeb9a", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "3.940037", + "tokenPool": "332868659.691000000000000000000000000000000000", + "address": "KT1SpB8Jk6GPCWUjMod8Q5NDpfagQaXVSpNk", + "sharesTotal": "349244476", + "midPrice": "0.000000", + "token": { + "address": "KT19N5AwdSar5acfVu16fBEjtAcAHTfHeb9a", + "decimals": 4, + "symbol": "REGI", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://piensa.co/img/Screen_Shot_2021-06-11_at_3.44.12_PM.png" + } + } + ] + }, + { + "symbol": "DEAL", + "thumbnailUri": "https://i.imgur.com/tSRInjl.png", + "tokenId": 0, + "decimals": 0, + "address": "KT1VYZVkB6Ub63x4scxyp4gj1tGHwynUoMJC", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.352789", + "tokenPool": "11530543445.000000000000000000000000000000000000", + "address": "KT1NqwpBs8f4M1ZMED8RifiZn9ydafCMJewE", + "sharesTotal": "479823965", + "midPrice": "0.000000", + "token": { "address": "KT1VYZVkB6Ub63x4scxyp4gj1tGHwynUoMJC", + "decimals": 0, + "symbol": "DEAL", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.322788", - "tokenPool": "12599015778.000000000000000000000000000000000000", - "address": "KT1NqwpBs8f4M1ZMED8RifiZn9ydafCMJewE", - "sharesTotal": "479823965", - "midPrice": "0.000000", - "token": { - "address": "KT1VYZVkB6Ub63x4scxyp4gj1tGHwynUoMJC", - "decimals": 0, - "symbol": "DEAL", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "SNTNL", - "address": "KT1928bxTqRym3TmLvyYwXuXfMr5GTE6kZ5C", + "standard": "fa2", + "thumbnailUri": "https://i.imgur.com/tSRInjl.png" + } + } + ] + }, + { + "symbol": "GRN", + "thumbnailUri": "https://i.imgur.com/y8LdvW2.png", + "tokenId": 0, + "decimals": 0, + "address": "KT1M6bsDfNjRyN13TFtxkh31ct8D7u1L4nsK", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.294550", + "tokenPool": "19422875.000000000000000000000000000000000000", + "address": "KT1Gzsvi5wGXY92RdKhXCxnjXvAD5XLDc9xE", + "sharesTotal": "72621235", + "midPrice": "0.000000", + "token": { + "address": "KT1M6bsDfNjRyN13TFtxkh31ct8D7u1L4nsK", + "decimals": 0, + "symbol": "GRN", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.320720", - "tokenPool": "1417.773210210000000000000000000000000000", - "address": "KT1SjpvoieZjxGhoVuhvWbJGiwAvZXuDkdPN", - "sharesTotal": "4704233", - "midPrice": "0.000226", - "token": { - "address": "KT1928bxTqRym3TmLvyYwXuXfMr5GTE6kZ5C", - "decimals": 8, - "symbol": "SNTNL", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "BRD", - "address": "KT1B2wWVDSHhg9J9jMtTpq7hGDM3nVHeExRY", + "standard": "fa2", + "thumbnailUri": "https://i.imgur.com/y8LdvW2.png" + } + } + ] + }, + { + "symbol": "ADA", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmThmzRdxxZztVAiq3dtpuq3dMzoaGuVrGMvSTVMc58UBy", + "tokenId": 0, + "decimals": 6, + "address": "KT18qqxrNTpLEjZ1fmTDg7kJWJfCWPop8Uor", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.376418", + "tokenPool": "613.162044000000000000000000000000000000", + "address": "KT1M3pnW1RFECAQQnifnLuJTbHHH5Ltqs3DP", + "sharesTotal": "5000000", + "midPrice": "0.000614", + "token": { + "address": "KT18qqxrNTpLEjZ1fmTDg7kJWJfCWPop8Uor", + "decimals": 6, + "symbol": "ADA", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.318127", - "tokenPool": "43494073.000000000000000000000000000000000000", - "address": "KT1TygomgXygeuo14C5tesmGvrKUdCiQjTMW", - "sharesTotal": "114131227", - "midPrice": "0.000000", - "token": { - "address": "KT1B2wWVDSHhg9J9jMtTpq7hGDM3nVHeExRY", - "decimals": 0, - "symbol": "BRD", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "wCEL", - "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", - "tokenId": 2, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.268789", - "tokenPool": "0.413000000000000000000000000000000000", - "address": "KT1KuV43iebbbrkBMGov2QMgAbsnAksx6ncW", - "sharesTotal": "122431", - "midPrice": "0.650821", - "token": { - "address": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", - "decimals": 4, - "symbol": "wCEL", - "tokenId": 2, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "GRN", - "address": "KT1M6bsDfNjRyN13TFtxkh31ct8D7u1L4nsK", + "standard": "fa2", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmThmzRdxxZztVAiq3dtpuq3dMzoaGuVrGMvSTVMc58UBy" + } + } + ] + }, + { + "symbol": "UNI", + "thumbnailUri": "https://imgur.com/0QuVvvq.jpg", + "tokenId": 0, + "decimals": 4, + "address": "KT1QM9Ejozgu2JGkbUb22Ng51CTwhgASE7QR", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.844783", + "tokenPool": "136742457.189300000000000000000000000000000000", + "address": "KT1QzxdvToyFwXuy4GFRkQRbUSmrqo66jMyv", + "sharesTotal": "20962523", + "midPrice": "0.000000", + "token": { + "address": "KT1QM9Ejozgu2JGkbUb22Ng51CTwhgASE7QR", + "decimals": 4, + "symbol": "UNI", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://imgur.com/0QuVvvq.jpg" + } + } + ] + }, + { + "symbol": "SHR", + "thumbnailUri": "https://i.imgur.com/yzYdqvG.png", + "tokenId": 0, + "decimals": 8, + "address": "KT1C9L6o5ZYdRWc9iAgEsVBfpe3wKFop31hf", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "2.489245", + "tokenPool": "3659045.255279560000000000000000000000000000", + "address": "KT1EMkmDUTy623xQRwR3Q2ZNCXK6mCmBadak", + "sharesTotal": "290820258", + "midPrice": "0.000001", + "token": { + "address": "KT1C9L6o5ZYdRWc9iAgEsVBfpe3wKFop31hf", + "decimals": 8, + "symbol": "SHR", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.imgur.com/yzYdqvG.png" + } + } + ] + }, + { + "symbol": "ISL", + "thumbnailUri": "https://i.imgur.com/Dhi6cQR.png", + "tokenId": 0, + "decimals": 4, + "address": "KT1UDJa1u5Hd2unZZXUYH7gSSfoBkP2yGoZi", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.046642", + "tokenPool": "2347179.764500000000000000000000000000000000", + "address": "KT19iU6QpiwskV6sxxtLm4Y64qyuW8ntAJkT", + "sharesTotal": "160536333", + "midPrice": "0.000000", + "token": { + "address": "KT1UDJa1u5Hd2unZZXUYH7gSSfoBkP2yGoZi", + "decimals": 4, + "symbol": "ISL", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.264549", - "tokenPool": "21618744.000000000000000000000000000000000000", - "address": "KT1Gzsvi5wGXY92RdKhXCxnjXvAD5XLDc9xE", - "sharesTotal": "72621235", - "midPrice": "0.000000", - "token": { - "address": "KT1M6bsDfNjRyN13TFtxkh31ct8D7u1L4nsK", - "decimals": 0, - "symbol": "GRN", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "tDAO", - "address": "KT1SEgjiCQYhY4frASUNEsYVTdyUbvZbrmZr", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.249922", - "tokenPool": "1.622700000000000000000000000000000000", - "address": "KT1Q79J9guKTbepaNvDy4hH9VGziXh2RPLiS", - "sharesTotal": "2198321", - "midPrice": "0.154016", - "token": { - "address": "KT1SEgjiCQYhY4frASUNEsYVTdyUbvZbrmZr", - "decimals": 5, - "symbol": "tDAO", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "BNB", + "standard": "fa2", + "thumbnailUri": "https://i.imgur.com/Dhi6cQR.png" + } + } + ] + }, + { + "symbol": "BNB", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmNN1fSHTkdWCZjXNaExgqo6G6vH1RK1FSSzrSddFTPZK8", + "tokenId": 0, + "decimals": 6, + "address": "KT1NGNjjUBgyGgiqA3Bme1Ev4Qgd9LEVfniQ", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.247494", + "tokenPool": "29977.597154000000000000000000000000000000", + "address": "KT1Uk8Kfq2yG75YpLqMkgHq9hm4aBiHpMWAu", + "sharesTotal": "26602323", + "midPrice": "0.000008", + "token": { "address": "KT1NGNjjUBgyGgiqA3Bme1Ev4Qgd9LEVfniQ", + "decimals": 6, + "symbol": "BNB", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.247493", - "tokenPool": "29977.717915000000000000000000000000000000", - "address": "KT1Uk8Kfq2yG75YpLqMkgHq9hm4aBiHpMWAu", - "sharesTotal": "26602323", - "midPrice": "0.000008", - "token": { - "address": "KT1NGNjjUBgyGgiqA3Bme1Ev4Qgd9LEVfniQ", - "decimals": 6, - "symbol": "BNB", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "STZ", - "address": "KT1Xdy9ZuhYBgoQqugyr2mtaeGMqoYxCDABB", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.238441", - "tokenPool": "74599.501100000000000000000000000000000000", - "address": "KT1DpUFdR6Utxa79TMG5WEbyD5dRW2jpc2Fc", - "sharesTotal": "200000", - "midPrice": "0.000003", - "token": { - "address": "KT1Xdy9ZuhYBgoQqugyr2mtaeGMqoYxCDABB", - "decimals": 4, - "symbol": "STZ", - "tokenId": 0, - "standard": "fa12" - } - } - ] - }, - { - "symbol": "HAM", - "address": "KT1MdBEZd21VuyM9G1RLzUdogfvzv7p6ZM2N", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.228188", - "tokenPool": "4399900.000000000000000000000000000000000000", - "address": "KT1SMeYvV1PS1fhfzLUQzRkHojCLfMuo2K1q", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1MdBEZd21VuyM9G1RLzUdogfvzv7p6ZM2N", - "decimals": 2, - "symbol": "HAM", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "UND", - "address": "KT1Mh8dtXqUD7MwqndKTs6BR7GmwusE2DFk3", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.220153", - "tokenPool": "17496691.375636000000000000000000000000000000", - "address": "KT1LWBsHXGrBcjyoYDmQHj2ezddFeue19Xpa", - "sharesTotal": "60520876", - "midPrice": "0.000000", - "token": { - "address": "KT1Mh8dtXqUD7MwqndKTs6BR7GmwusE2DFk3", - "decimals": 6, - "symbol": "UND", - "tokenId": 0, - "standard": "fa12" - } - } - ] - }, - { - "symbol": "SEBPUMP", - "address": "KT1Rw3vGmfZfZhX9CNnVT1q7NHU7brgiUiGD", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.215533", - "tokenPool": "458048.877454420000000000000000000000000000", - "address": "KT1FTizZuTUrADe7ZV9KAFoLiFdmSpS2H7eu", - "sharesTotal": "690558", - "midPrice": "0.000000", - "token": { - "address": "KT1Rw3vGmfZfZhX9CNnVT1q7NHU7brgiUiGD", - "decimals": 8, - "symbol": "SEBPUMP", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "PBJ", - "address": "KT1GPS4MPmACD6yoaTCi1RUZRk39nYWs2796", + "standard": "fa2", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmNN1fSHTkdWCZjXNaExgqo6G6vH1RK1FSSzrSddFTPZK8" + } + } + ] + }, + { + "symbol": "BRD", + "thumbnailUri": "https://i.imgur.com/MVOaTLl.png", + "tokenId": 0, + "decimals": 0, + "address": "KT1B2wWVDSHhg9J9jMtTpq7hGDM3nVHeExRY", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.338128", + "tokenPool": "40928569.000000000000000000000000000000000000", + "address": "KT1TygomgXygeuo14C5tesmGvrKUdCiQjTMW", + "sharesTotal": "114131227", + "midPrice": "0.000000", + "token": { + "address": "KT1B2wWVDSHhg9J9jMtTpq7hGDM3nVHeExRY", + "decimals": 0, + "symbol": "BRD", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.182305", - "tokenPool": "5910023.934384000000000000000000000000000000", - "address": "KT1GFDagtGGQS1gmC3S6Noqns1svCTzL23By", - "sharesTotal": "10241698", - "midPrice": "0.000000", - "token": { - "address": "KT1GPS4MPmACD6yoaTCi1RUZRk39nYWs2796", - "decimals": 6, - "symbol": "PBJ", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "ATM", - "address": "KT1RmmFTZte4MibqBg9D126EHUmxqhd33owX", + "standard": "fa2", + "thumbnailUri": "https://i.imgur.com/MVOaTLl.png" + } + } + ] + }, + { + "symbol": "BLU", + "thumbnailUri": "https://i.imgur.com/zoZM7TA.png", + "tokenId": 0, + "decimals": 0, + "address": "KT1AZQQvPhFSq9TUnQgrDMA81vw7rNVTZ33T", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.049558", + "tokenPool": "140387787.000000000000000000000000000000000000", + "address": "KT1JvgTH13CgLcqtowAhRxB6NZYfEpoAVmzv", + "sharesTotal": "5683296", + "midPrice": "0.000000", + "token": { + "address": "KT1AZQQvPhFSq9TUnQgrDMA81vw7rNVTZ33T", + "decimals": 0, + "symbol": "BLU", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.181071", - "tokenPool": "10.450676240000000000000000000000000000", - "address": "KT1EfAZDZBgiQTMjTJVHygaAThypBehYoNjF", - "sharesTotal": "14755986", - "midPrice": "0.017326", - "token": { - "address": "KT1RmmFTZte4MibqBg9D126EHUmxqhd33owX", - "decimals": 8, - "symbol": "ATM", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "POTUS", - "address": "KT1J9Ys872gGuDLiLUBssMo9FBsBd4ZdhJkj", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.160396", - "tokenPool": "32.095338000000000000000000000000000000", - "address": "KT1LXm1MbKd9kfTSNZ2ms8iknaJV6mtfFWDZ", - "sharesTotal": "2221649", - "midPrice": "0.004997", - "token": { - "address": "KT1J9Ys872gGuDLiLUBssMo9FBsBd4ZdhJkj", - "decimals": 6, - "symbol": "POTUS", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "RITA", - "address": "KT1Soa1U1fYRQEgg9No3Xvqxuv46kUZFFdJ6", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.289766", - "tokenPool": "34.627313000000000000000000000000000000", - "address": "KT1MFDftFLTGumy7qARZkwguxfwc6ZxPpVpA", - "sharesTotal": "1000000", - "midPrice": "0.008368", - "token": { - "address": "KT1Soa1U1fYRQEgg9No3Xvqxuv46kUZFFdJ6", - "decimals": 6, - "symbol": "RITA", - "tokenId": 0, - "standard": "fa2" - } - }, - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1L98jqwZtKUZbcPNxb3pTY7b2WXUGEzn8G", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1Soa1U1fYRQEgg9No3Xvqxuv46kUZFFdJ6", - "decimals": 6, - "symbol": "RITA", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "BOB", - "address": "KT1LjzdDC8DXGW78yvd94vy4Q33X3tbQJfj5", + "standard": "fa2", + "thumbnailUri": "https://i.imgur.com/zoZM7TA.png" + } + } + ] + }, + { + "symbol": "CSC", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmZ96X5HgnX6qsZpZY2AzhD4Rsck888kAAmCjECTvMXcvy", + "tokenId": 0, + "decimals": 8, + "address": "KT1Eh1hvFePfvzJqHwzhuaTesr7gd8zwtKpo", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1JDWkiZaj5bYNMeUvjwNmKghwGXMNRQoP5", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1Eh1hvFePfvzJqHwzhuaTesr7gd8zwtKpo", + "decimals": 8, + "symbol": "CSC", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.141736", - "tokenPool": "19005.212760000000000000000000000000000000", - "address": "KT1ThbcvTfgb75Bn74QdNCFw8bPA7swVgJ1H", - "sharesTotal": "4991211", - "midPrice": "0.000007", - "token": { - "address": "KT1LjzdDC8DXGW78yvd94vy4Q33X3tbQJfj5", - "decimals": 5, - "symbol": "BOB", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "TRAIN", - "address": "KT1ATbUg9w9CEKW9tYevik5Q2Y4iDxe3omWh", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.128255", - "tokenPool": "3441211.587120000000000000000000000000000000", - "address": "KT1FX2JpmzsrUebK2NNAYZWpU3C9HTPBHxMJ", - "sharesTotal": "14546282", - "midPrice": "0.000000", - "token": { - "address": "KT1ATbUg9w9CEKW9tYevik5Q2Y4iDxe3omWh", - "decimals": 6, - "symbol": "TRAIN", - "tokenId": 0, - "standard": "fa12" - } - } - ] - }, - { - "symbol": "FuADA", - "address": "KT194SeMyG2Esh79sjTQjEBJuGeJmTbUn1gP", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.115495", - "tokenPool": "47848435.649399000000000000000000000000000000", - "address": "KT1DxE2SLAVXWfbzAKHtKzdf4cvCSQtdVwUT", - "sharesTotal": "6708267", - "midPrice": "0.000000", - "token": { - "address": "KT194SeMyG2Esh79sjTQjEBJuGeJmTbUn1gP", - "decimals": 6, - "symbol": "FuADA", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "SIR", - "address": "KT1FdUMyYS4r8PP9Xa1dorD1Xk9wRE48zpzE", + "standard": "fa2", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmZ96X5HgnX6qsZpZY2AzhD4Rsck888kAAmCjECTvMXcvy" + } + } + ] + }, + { + "symbol": "BTC1", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/Qmdwtf3M4TN6TcN5Y7eL3pr9a9eKApT4AR5W28EW4KKSzN", + "tokenId": 0, + "decimals": 6, + "address": "KT1QdH9m19BLqSYgRN9jjBrgTmRTRRqi3PYm", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.409993", + "tokenPool": "640898.994352000000000000000000000000000000", + "address": "KT1ATazaqB4cLQLpjSBUgKSJJwvd1tnkqmA5", + "sharesTotal": "7200922", + "midPrice": "0.000001", + "token": { + "address": "KT1QdH9m19BLqSYgRN9jjBrgTmRTRRqi3PYm", + "decimals": 6, + "symbol": "BTC1", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.107583", - "tokenPool": "9395.523492930000000000000000000000000000", - "address": "KT191QXpM1L4E6nKBY8ixU7HSD4fxJiWMbkE", - "sharesTotal": "313872", - "midPrice": "0.000011", - "token": { - "address": "KT1FdUMyYS4r8PP9Xa1dorD1Xk9wRE48zpzE", - "decimals": 8, - "symbol": "SIR", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "FKB", - "address": "KT1FftDwLS6F7RVrpQ8nTmScCfNFaAyWTSdc", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.100685", - "tokenPool": "10312649.140773810000000000000000000000000000", - "address": "KT1MEJ7TUrphCY6tQ9LmyuyreZ5SRA1uU4xC", - "sharesTotal": "10091", - "midPrice": "0.000000", - "token": { - "address": "KT1FftDwLS6F7RVrpQ8nTmScCfNFaAyWTSdc", - "decimals": 8, - "symbol": "FKB", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "OBJKT", - "address": "KT1RJ6PbjHpwc3M5rw5s2Nbmefwbuwbdxton", - "tokenId": 649760, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.100000", - "tokenPool": "1.000000000000000000000000000000000000", - "address": "KT1KDau5rZdaYyRqFEMc5iPt5gfAusRryWRV", - "sharesTotal": "100000", - "midPrice": "0.100000", - "token": { - "address": "KT1RJ6PbjHpwc3M5rw5s2Nbmefwbuwbdxton", - "decimals": 0, - "symbol": "OBJKT", - "tokenId": 649760, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "SAT", - "address": "KT1B6bmPvGZAmNT3qrkzwvmXDTnrvp7Lbxks", + "standard": "fa2", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/Qmdwtf3M4TN6TcN5Y7eL3pr9a9eKApT4AR5W28EW4KKSzN" + } + } + ] + }, + { + "symbol": "BTC2", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmbeuBb9qF4ZiHPniVWhPDPMnoCotJSeWV1gnjHTcNLy4o", + "tokenId": 0, + "decimals": 6, + "address": "KT1P8qj6uVynf7d6wzqvuaxjYZzys5kKiVLb", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1N25Lxf3hQJ22FdwtWNAwLCoZeTVpDbUAM", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1P8qj6uVynf7d6wzqvuaxjYZzys5kKiVLb", + "decimals": 6, + "symbol": "BTC2", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.097257", - "tokenPool": "3232.523316880000000000000000000000000000", - "address": "KT1ATGWUqAASWRDP7reiUF5HHqMxd6RZqVim", - "sharesTotal": "964890", - "midPrice": "0.000030", - "token": { - "address": "KT1B6bmPvGZAmNT3qrkzwvmXDTnrvp7Lbxks", - "decimals": 8, - "symbol": "SAT", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "QS", - "address": "KT1X6VRDukq62UCfrMRzg6QVB1EMzDSbh81Z", + "standard": "fa2", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmbeuBb9qF4ZiHPniVWhPDPMnoCotJSeWV1gnjHTcNLy4o" + } + } + ] + }, + { + "symbol": "BTC3", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmNYkzNEE4kBSxhd36vGnaxWH8G5aFNXX2i7M8quPdmMJw", + "tokenId": 0, + "decimals": 6, + "address": "KT1HwLx5RfATUQH9KUPx99aLsqsyFWPSEbqv", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1FFue2YP5SSfLzPijJmqwrF8gkAc7hnukx", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1HwLx5RfATUQH9KUPx99aLsqsyFWPSEbqv", + "decimals": 6, + "symbol": "BTC3", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmNYkzNEE4kBSxhd36vGnaxWH8G5aFNXX2i7M8quPdmMJw" + } + } + ] + }, + { + "symbol": "BTC4", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmSenaL2Nw4wU628SYdaVaTwTQYz7KuA6LN1X8HyduDG6H", + "tokenId": 0, + "decimals": 6, + "address": "KT1MrddXSC95aFLjGBDpwJkAiiSTRi1FA2np", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1JFaoRJMBW1XzKfuoPPxaLJ62Vubc4nrsB", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1MrddXSC95aFLjGBDpwJkAiiSTRi1FA2np", + "decimals": 6, + "symbol": "BTC4", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.095641", - "tokenPool": "115408.204536950000000000000000000000000000", - "address": "KT1SBPG2qfEX7NY3eRGY1REeFhM2XsyNvAdq", - "sharesTotal": "848994", - "midPrice": "0.000001", - "token": { - "address": "KT1X6VRDukq62UCfrMRzg6QVB1EMzDSbh81Z", - "decimals": 8, - "symbol": "QS", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "UNICORN", - "address": "KT1DmR7Rq1Ke5ULzXaPjcHjfBj1k376KrR9c", + "standard": "fa2", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmSenaL2Nw4wU628SYdaVaTwTQYz7KuA6LN1X8HyduDG6H" + } + } + ] + }, + { + "symbol": "BTC5", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmNnk8jrZJSj9AbAn1fvbWwYeY6NWSAQU4S1J1pDuyAf59", + "tokenId": 0, + "decimals": 6, + "address": "KT1LoSAeGphkrobjGMYouXLFyMF2ds6oJNTL", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1TBHqcaKywLLftJVerYxtBLcuQktfm8Jd1", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1LoSAeGphkrobjGMYouXLFyMF2ds6oJNTL", + "decimals": 6, + "symbol": "BTC5", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.088599", - "tokenPool": "127805.566005630000000000000000000000000000", - "address": "KT1L1TFirUokGGfvX6zx7QQfKEYCu93oeRJA", - "sharesTotal": "23196676", - "midPrice": "0.000001", - "token": { - "address": "KT1DmR7Rq1Ke5ULzXaPjcHjfBj1k376KrR9c", - "decimals": 8, - "symbol": "UNICORN", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "TIGER", - "address": "KT1DkQjYFtc9JobC1JAJAxzpwaNm2RGkEkgR", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.085778", - "tokenPool": "5757455.000000000000000000000000000000000000", - "address": "KT1KQ71iXPDKuY2E9AGqQq1LqxepHRc6eqqU", - "sharesTotal": "21842978", - "midPrice": "0.000000", - "token": { - "address": "KT1DkQjYFtc9JobC1JAJAxzpwaNm2RGkEkgR", - "decimals": 0, - "symbol": "TIGER", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "PENTA", - "address": "KT1HMDDEwHLHcLs9YiLRx9GbSexww3439aca", + "standard": "fa2", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmNnk8jrZJSj9AbAn1fvbWwYeY6NWSAQU4S1J1pDuyAf59" + } + } + ] + }, + { + "symbol": "BTC6", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmTNuBhoLe2vkxK82AHFzypGjqbX2D8J5pcUpLcLUXGE9N", + "tokenId": 0, + "decimals": 6, + "address": "KT1DM7HeBxPWFg1JcotGtyasTSByB5X1JYQN", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1QoPpq3kXp3xkx8VwzKtWe7drfsyCijZM4", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1DM7HeBxPWFg1JcotGtyasTSByB5X1JYQN", + "decimals": 6, + "symbol": "BTC6", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmTNuBhoLe2vkxK82AHFzypGjqbX2D8J5pcUpLcLUXGE9N" + } + } + ] + }, + { + "symbol": "PONZI", + "thumbnailUri": "https://cdn.discordapp.com/attachments/688132602086948868/871322496287268904/golden_ponzi-.png", + "tokenId": 0, + "decimals": 8, + "address": "KT1PLKdq3qCkBeanToghBFaE4MGXbXQAJt6c", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.932256", + "tokenPool": "842547928.463660570000000000000000000000000000", + "address": "KT18rgqH7c4jEUoaoNNirswDab9naUvQmWsU", + "sharesTotal": "8534795835", + "midPrice": "0.000000", + "token": { + "address": "KT1PLKdq3qCkBeanToghBFaE4MGXbXQAJt6c", + "decimals": 8, + "symbol": "PONZI", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://cdn.discordapp.com/attachments/688132602086948868/871322496287268904/golden_ponzi-.png" + } + } + ] + }, + { + "symbol": "LTC", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmcKgE5Cawa8tDDUjGnXEbuFeFpAVNck1pyUYXK3fHZZuv", + "tokenId": 0, + "decimals": 6, + "address": "KT1EWcmtZEps6EgVDp1hxsTo5aEtCT4Zs44T", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "1.222154", + "tokenPool": "43662584.618822000000000000000000000000000000", + "address": "KT18kRMKXKWyVzjDsdi6GDWQj4KM64NQiRv3", + "sharesTotal": "5033179", + "midPrice": "0.000000", + "token": { + "address": "KT1EWcmtZEps6EgVDp1hxsTo5aEtCT4Zs44T", + "decimals": 6, + "symbol": "LTC", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmcKgE5Cawa8tDDUjGnXEbuFeFpAVNck1pyUYXK3fHZZuv" + } + } + ] + }, + { + "symbol": "PEPE", + "thumbnailUri": "https://p7.hiclipart.com/preview/410/549/254/pepe-the-frog-feeling-meme-clip-art-sad.jpg", + "tokenId": 0, + "decimals": 6, + "address": "KT1QkLuPFb7PvR1hB33Bymruie8p5Yx8mUVB", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT19xVDAmh9z3mm8TSpBfSxWpEytgsQSD9p3", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1QkLuPFb7PvR1hB33Bymruie8p5Yx8mUVB", + "decimals": 6, + "symbol": "PEPE", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.082393", - "tokenPool": "1620475.977318000000000000000000000000000000", - "address": "KT1Vjp7tHoNXRPpd9BbGrq9pbxF1FxMFUFTE", - "sharesTotal": "2546301", - "midPrice": "0.000000", - "token": { - "address": "KT1HMDDEwHLHcLs9YiLRx9GbSexww3439aca", - "decimals": 6, - "symbol": "PENTA", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "DRUG", - "address": "KT1WpRmhPLkdt1gMYgavqYQ2MXpfCugzo4yb", + "standard": "fa2", + "thumbnailUri": "https://p7.hiclipart.com/preview/410/549/254/pepe-the-frog-feeling-meme-clip-art-sad.jpg" + } + } + ] + }, + { + "symbol": "BOB", + "thumbnailUri": "https://ibb.co/KKGWGVx", + "tokenId": 0, + "decimals": 5, + "address": "KT1LjzdDC8DXGW78yvd94vy4Q33X3tbQJfj5", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.141737", + "tokenPool": "19005.079080000000000000000000000000000000", + "address": "KT1ThbcvTfgb75Bn74QdNCFw8bPA7swVgJ1H", + "sharesTotal": "4991211", + "midPrice": "0.000007", + "token": { + "address": "KT1LjzdDC8DXGW78yvd94vy4Q33X3tbQJfj5", + "decimals": 5, + "symbol": "BOB", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.076110", - "tokenPool": "0.304069900000000000000000000000000000", - "address": "KT1EwTnttNBYCDRKoWcaL8ZvjbhNGBSbbRkR", - "sharesTotal": "149264", - "midPrice": "0.250304", - "token": { - "address": "KT1WpRmhPLkdt1gMYgavqYQ2MXpfCugzo4yb", - "decimals": 8, - "symbol": "DRUG", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "BLU", - "address": "KT1AZQQvPhFSq9TUnQgrDMA81vw7rNVTZ33T", + "standard": "fa2", + "thumbnailUri": "https://ibb.co/KKGWGVx" + } + } + ] + }, + { + "symbol": "FES", + "thumbnailUri": "https://i.imgur.com/V35whaI.png", + "tokenId": 0, + "decimals": 8, + "address": "KT1Jz2W7LgsfTHw43w1dYKN8cbe8omansKk3", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.001074", + "tokenPool": "4532.005072520000000000000000000000000000", + "address": "KT1PFkvrmMWXtbBLnrGdMEky8jjTg84KmAgL", + "sharesTotal": "672289", + "midPrice": "0.000000", + "token": { + "address": "KT1Jz2W7LgsfTHw43w1dYKN8cbe8omansKk3", + "decimals": 8, + "symbol": "FES", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.074353", - "tokenPool": "93475590.000000000000000000000000000000000000", - "address": "KT1JvgTH13CgLcqtowAhRxB6NZYfEpoAVmzv", - "sharesTotal": "5683296", - "midPrice": "0.000000", - "token": { - "address": "KT1AZQQvPhFSq9TUnQgrDMA81vw7rNVTZ33T", - "decimals": 0, - "symbol": "BLU", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "FOX", + "standard": "fa2", + "thumbnailUri": "https://i.imgur.com/V35whaI.png" + } + } + ] + }, + { + "symbol": "RUM", + "thumbnailUri": "https://cryptocurrencytoday.net/images/rum_token_350x350.png", + "tokenId": 0, + "decimals": 8, + "address": "KT1B1TBVgvenRKG2UJnwSgeNbZdVM6yumiVJ", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "3.256125", + "tokenPool": "723.469662730000000000000000000000000000", + "address": "KT1JZvv1ivDu6P7W78kZ57ESUxLRnayHsxgq", + "sharesTotal": "3042848", + "midPrice": "0.004501", + "token": { + "address": "KT1B1TBVgvenRKG2UJnwSgeNbZdVM6yumiVJ", + "decimals": 8, + "symbol": "RUM", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://cryptocurrencytoday.net/images/rum_token_350x350.png" + } + } + ] + }, + { + "symbol": "CBR", + "thumbnailUri": "https://i.scdn.co/image/d8b569e706f1023b5578855636a72553ff1e4c13", + "tokenId": 0, + "decimals": 3, + "address": "KT1DWp6Q7SmwMGDEdNZgJAJmkiPrsscEmM24", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1HXmmPQfftmwJEWTjJLfz2aMVwmZfKVLGD", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1DWp6Q7SmwMGDEdNZgJAJmkiPrsscEmM24", + "decimals": 3, + "symbol": "CBR", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.scdn.co/image/d8b569e706f1023b5578855636a72553ff1e4c13" + } + } + ] + }, + { + "symbol": "PORN", + "thumbnailUri": "https://upload.wikimedia.org/wikipedia/commons/thumb/f/f1/Pornhub-logo.svg/1200px-Pornhub-logo.svg.png", + "tokenId": 0, + "decimals": 5, + "address": "KT1RsvaReC94WzimV2LBrx3PQAEZERMTmPE9", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1Qkma5Tu5mcsK1GXoDm2ymjvWrBgSnfpKV", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1RsvaReC94WzimV2LBrx3PQAEZERMTmPE9", + "decimals": 5, + "symbol": "PORN", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://upload.wikimedia.org/wikipedia/commons/thumb/f/f1/Pornhub-logo.svg/1200px-Pornhub-logo.svg.png" + } + } + ] + }, + { + "symbol": "KLL", + "thumbnailUri": "https://i.imgur.com/2s1WRni.png", + "tokenId": 0, + "decimals": 8, + "address": "KT1Td6a28ydPMXKJS5yS5Usadj4Qx5drsCfY", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.187509", + "tokenPool": "1920711.390590560000000000000000000000000000", + "address": "KT1EWESqA7ZrHg9eLeioaGP84ETN9rpgnLKW", + "sharesTotal": "260669041", + "midPrice": "0.000000", + "token": { + "address": "KT1Td6a28ydPMXKJS5yS5Usadj4Qx5drsCfY", + "decimals": 8, + "symbol": "KLL", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.imgur.com/2s1WRni.png" + } + } + ] + }, + { + "symbol": "BOMB", + "thumbnailUri": "https://i.ibb.co/py882XD/bomberman.png", + "tokenId": 0, + "decimals": 5, + "address": "KT1AASSrwkXNKnHmwkmEGJ54bSnFvf4YWMHd", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.541891", + "tokenPool": "20636.237780000000000000000000000000000000", + "address": "KT1QmrQm6mvPUJRL8FMjYRMm8kcdHP3rshWp", + "sharesTotal": "50840248", + "midPrice": "0.000026", + "token": { + "address": "KT1AASSrwkXNKnHmwkmEGJ54bSnFvf4YWMHd", + "decimals": 5, + "symbol": "BOMB", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.ibb.co/py882XD/bomberman.png" + } + } + ] + }, + { + "symbol": "DBL", + "thumbnailUri": "https://ipfs.io/ipfs/QmWH8K3HAZFozz4uYC4XFvqUYycyEBLgZFLFU2RUgR4X9y", + "tokenId": 0, + "decimals": 4, + "address": "KT1PEe4fJWsaGDZY8Ptvc9Z9TPEV5PCFC4MQ", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "33.888073", + "tokenPool": "280777.604600000000000000000000000000000000", + "address": "KT1VBPZmW4KNLvi7CTKUuo9QQWwsPCrfR8hW", + "sharesTotal": "136179939", + "midPrice": "0.000121", + "token": { + "address": "KT1PEe4fJWsaGDZY8Ptvc9Z9TPEV5PCFC4MQ", + "decimals": 4, + "symbol": "DBL", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://ipfs.io/ipfs/QmWH8K3HAZFozz4uYC4XFvqUYycyEBLgZFLFU2RUgR4X9y" + } + } + ] + }, + { + "symbol": "TV", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmUhvRYqGk5QX9CgrVVQJY8xXzytkQfTtiZRHWBsBw6SrR", + "tokenId": 0, + "decimals": 6, + "address": "KT1NVYsEeGYKyNQkRiVU5i16nQyiXcGFF9LH", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "9.141251", + "tokenPool": "3231752.115054000000000000000000000000000000", + "address": "KT1SGExhNnCwANc59YfXKZBsikxEETQPsf5N", + "sharesTotal": "5342998932", + "midPrice": "0.000003", + "token": { + "address": "KT1NVYsEeGYKyNQkRiVU5i16nQyiXcGFF9LH", + "decimals": 6, + "symbol": "TV", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmUhvRYqGk5QX9CgrVVQJY8xXzytkQfTtiZRHWBsBw6SrR" + } + } + ] + }, + { + "symbol": "FOX", + "thumbnailUri": "https://i.ibb.co/mqyPhf6/metamask-logo-png-transparent.png", + "tokenId": 0, + "decimals": 6, + "address": "KT1FzNpp3Yqe3gQQXVEaSXcQHcTHEwKcsnJ8", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.065325", + "tokenPool": "1057.734627000000000000000000000000000000", + "address": "KT1P7JYHEybogT2cmkJ19hfBAwzDrQrZgRGi", + "sharesTotal": "1711921", + "midPrice": "0.000062", + "token": { "address": "KT1FzNpp3Yqe3gQQXVEaSXcQHcTHEwKcsnJ8", + "decimals": 6, + "symbol": "FOX", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.065324", - "tokenPool": "1057.750770000000000000000000000000000000", - "address": "KT1P7JYHEybogT2cmkJ19hfBAwzDrQrZgRGi", - "sharesTotal": "1711921", - "midPrice": "0.000062", - "token": { - "address": "KT1FzNpp3Yqe3gQQXVEaSXcQHcTHEwKcsnJ8", - "decimals": 6, - "symbol": "FOX", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "tzSHILL", - "address": "KT1QpaXUnc4du6zVTCDUFHsE9gF3DqR1o4RX", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.056077", - "tokenPool": "189419.757642290000000000000000000000000000", - "address": "KT1HT2cQb2ZCnzpGe1W37tFimbscs6BmWMkQ", - "sharesTotal": "1000000", - "midPrice": "0.000000", - "token": { - "address": "KT1QpaXUnc4du6zVTCDUFHsE9gF3DqR1o4RX", - "decimals": 8, - "symbol": "tzSHILL", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "ISL", - "address": "KT1UDJa1u5Hd2unZZXUYH7gSSfoBkP2yGoZi", + "standard": "fa2", + "thumbnailUri": "https://i.ibb.co/mqyPhf6/metamask-logo-png-transparent.png" + } + } + ] + }, + { + "symbol": "QS", + "thumbnailUri": "https://app.gitbook.com/share/space/thumbnail/-MK5jggRQ9qNt2woaY5S.png", + "tokenId": 0, + "decimals": 8, + "address": "KT1X6VRDukq62UCfrMRzg6QVB1EMzDSbh81Z", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.095641", + "tokenPool": "115408.204536950000000000000000000000000000", + "address": "KT1SBPG2qfEX7NY3eRGY1REeFhM2XsyNvAdq", + "sharesTotal": "848994", + "midPrice": "0.000001", + "token": { + "address": "KT1X6VRDukq62UCfrMRzg6QVB1EMzDSbh81Z", + "decimals": 8, + "symbol": "QS", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.046641", - "tokenPool": "2347229.937900000000000000000000000000000000", - "address": "KT19iU6QpiwskV6sxxtLm4Y64qyuW8ntAJkT", - "sharesTotal": "160536333", - "midPrice": "0.000000", - "token": { - "address": "KT1UDJa1u5Hd2unZZXUYH7gSSfoBkP2yGoZi", - "decimals": 4, - "symbol": "ISL", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "TED", - "address": "KT1AjD9hAkXifoYtECD7wuP5ZCz1AjfjQTXJ", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.037091", - "tokenPool": "3.830000000000000000000000000000000000", - "address": "KT1PmmaD34R8nK1d1ra8nUZfBFcTWGLmAjgG", - "sharesTotal": "521996", - "midPrice": "0.009684", - "token": { - "address": "KT1AjD9hAkXifoYtECD7wuP5ZCz1AjfjQTXJ", - "decimals": 2, - "symbol": "TED", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "YOU", - "address": "KT1J68zNxjpCdvJTBuQXC77BgivbF1Hbkz7b", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.030521", - "tokenPool": "0.000328592766000000000000000000000000", - "address": "KT1A7LjskJkSTZwJaFBPYv34ZJJ46kB3PkxU", - "sharesTotal": "10000", - "midPrice": "92.883968", - "token": { - "address": "KT1J68zNxjpCdvJTBuQXC77BgivbF1Hbkz7b", - "decimals": 12, - "symbol": "YOU", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "uUSD", - "address": "KT1QTcAXeefhJ3iXLurRt81WRKdv7YqyYFmo", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.013000", - "tokenPool": "0.023094320208000000000000000000000000", - "address": "KT1DB4UrjiiqVJK8JCGDmzMe2GvhWSamLeyU", - "sharesTotal": "10000", - "midPrice": "0.562909", - "token": { - "address": "KT1QTcAXeefhJ3iXLurRt81WRKdv7YqyYFmo", - "decimals": 12, - "symbol": "uUSD", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "sVote", - "address": "KT1Qf46j2x37sAN4t2MKRQRVt9gc4FZ5duMs", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1VcUfNTWM8565RNLnwzmJRVHUNbZBKUtcj", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1Qf46j2x37sAN4t2MKRQRVt9gc4FZ5duMs", - "decimals": 0, - "symbol": "sVote", - "tokenId": 0, - "standard": "fa2" - } - }, - { - "name": "quipuswap", - "tezPool": "0.025832", - "tokenPool": "196721.000000000000000000000000000000000000", - "address": "KT1NfjFAuAvkgDRGqi4kXEta2rvXP3sfb1rG", - "sharesTotal": "5000000", - "midPrice": "0.000000", - "token": { - "address": "KT1Qf46j2x37sAN4t2MKRQRVt9gc4FZ5duMs", - "decimals": 0, - "symbol": "sVote", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "WCK", - "address": "KT1XasNSXe1F2gYP7MbEU2cqmEfdJtpuJ4hJ", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.012676", - "tokenPool": "2.996620000000000000000000000000000000", - "address": "KT1N6peYqLQjASQ48ec79zRHLs6hPgKPzdDj", - "sharesTotal": "13721", - "midPrice": "0.004230", - "token": { - "address": "KT1XasNSXe1F2gYP7MbEU2cqmEfdJtpuJ4hJ", - "decimals": 6, - "symbol": "WCK", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "MERC", - "address": "KT1E6Utp7jQ8pmXTPuDaFtirokLdwfZKdsKB", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.012304", - "tokenPool": "786.082781590000000000000000000000000000", - "address": "KT1CPxq4nUsiZqvjxddj8qEkakxS4JzU6BML", - "sharesTotal": "3019774", - "midPrice": "0.000016", - "token": { - "address": "KT1E6Utp7jQ8pmXTPuDaFtirokLdwfZKdsKB", - "decimals": 8, - "symbol": "MERC", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "ELT", - "address": "KT1KymUkTTtvfohvd8jPnCSQvpNQ5vTQ1krE", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.006546", - "tokenPool": "935.244117000000000000000000000000000000", - "address": "KT1D6xVWbpypZW63tszU28KrHXMYMbMqoRTi", - "sharesTotal": "2427116", - "midPrice": "0.000007", - "token": { - "address": "KT1KymUkTTtvfohvd8jPnCSQvpNQ5vTQ1krE", - "decimals": 6, - "symbol": "ELT", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "FES", - "address": "KT1Jz2W7LgsfTHw43w1dYKN8cbe8omansKk3", + "standard": "fa2", + "thumbnailUri": "https://app.gitbook.com/share/space/thumbnail/-MK5jggRQ9qNt2woaY5S.png" + } + } + ] + }, + { + "symbol": "CAP", + "thumbnailUri": "https://i.ibb.co/Fnv1FWj/dave-chapelle.png", + "tokenId": 0, + "decimals": 8, + "address": "KT18qpkmVoxf88t2shbeQnbXTa7jSLzbowSw", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1MPV9LMchKT2ooYWw5vJBode73ro5XeCiP", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT18qpkmVoxf88t2shbeQnbXTa7jSLzbowSw", + "decimals": 8, + "symbol": "CAP", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.ibb.co/Fnv1FWj/dave-chapelle.png" + } + } + ] + }, + { + "symbol": "Heavy", + "thumbnailUri": "https://i.ibb.co/km3XPcL/heavy.png", + "tokenId": 0, + "decimals": 9, + "address": "KT18zKdz3PHxDmN9C58VAWhZxQYJRMcFy1qH", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1GWkEazKxvft7LieatG7NSd7jiB3TSX9Mf", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT18zKdz3PHxDmN9C58VAWhZxQYJRMcFy1qH", + "decimals": 9, + "symbol": "Heavy", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.ibb.co/km3XPcL/heavy.png" + } + } + ] + }, + { + "symbol": "TRX", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmWRy7ZbNWczeLD38t5Xtajg5eusHGfHKYxR58ZY8nfpnG", + "tokenId": 0, + "decimals": 6, + "address": "KT1Ru2mLLtdmnzpakGKaGii32Tax3h81SEYH", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "4.879274", + "tokenPool": "19202756381.307939000000000000000000000000000000", + "address": "KT1VEUWLJGktxZkU7jRzVfPvf82rUbKWF3kV", + "sharesTotal": "6708539", + "midPrice": "0.000000", + "token": { + "address": "KT1Ru2mLLtdmnzpakGKaGii32Tax3h81SEYH", + "decimals": 6, + "symbol": "TRX", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmWRy7ZbNWczeLD38t5Xtajg5eusHGfHKYxR58ZY8nfpnG" + } + } + ] + }, + { + "symbol": "TGR", + "thumbnailUri": "https://i.ibb.co/hgBbskb/tiger.png", + "tokenId": 0, + "decimals": 5, + "address": "KT1SywHHNpdeowZNRDki871hpDfiU3DZPQkw", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1AFmt4H8UcZvSyc1xEDYoVdu9NqRnWgema", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1SywHHNpdeowZNRDki871hpDfiU3DZPQkw", + "decimals": 5, + "symbol": "TGR", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.ibb.co/hgBbskb/tiger.png" + } + } + ] + }, + { + "symbol": "LMR", + "thumbnailUri": "https://i.ibb.co/YQXgmQv/lemur.png", + "tokenId": 0, + "decimals": 5, + "address": "KT1Gd3fR4dHQPsUUnDVCK1EquCPXEQVHcSQY", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1Lv9t1pzmvTTfat4darBLKRdc5ESHBvyJ1", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1Gd3fR4dHQPsUUnDVCK1EquCPXEQVHcSQY", + "decimals": 5, + "symbol": "LMR", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.ibb.co/YQXgmQv/lemur.png" + } + } + ] + }, + { + "symbol": "TZF", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmY6rsFfBQxTneESd5emZhUo6hwa1RYUU7zakLJzDs86NS", + "tokenId": 0, + "decimals": 6, + "address": "KT1NGeaqJ5Cd8CkiazBsjQw1fWyWYhXr28v4", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.557645", + "tokenPool": "954.342497000000000000000000000000000000", + "address": "KT1FgFdoW8FRrhJznPNVTuRLfrt4fL6JwuzQ", + "sharesTotal": "20000000", + "midPrice": "0.000584", + "token": { + "address": "KT1NGeaqJ5Cd8CkiazBsjQw1fWyWYhXr28v4", + "decimals": 6, + "symbol": "TZF", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.001074", - "tokenPool": "4532.005072520000000000000000000000000000", - "address": "KT1PFkvrmMWXtbBLnrGdMEky8jjTg84KmAgL", - "sharesTotal": "672289", - "midPrice": "0.000000", - "token": { - "address": "KT1Jz2W7LgsfTHw43w1dYKN8cbe8omansKk3", - "decimals": 8, - "symbol": "FES", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "PLP", - "address": "KT1UC3vcVZ4K9b39uQxaMNA2N1RuJXKLCnoA", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000045", - "tokenPool": "4.737793393808323809000000000000000000", - "address": "KT1R5KNMvNPFVUCGugEVGn93k6J7ffXQMUKq", - "sharesTotal": "1000", - "midPrice": "0.000009", - "token": { - "address": "KT1UC3vcVZ4K9b39uQxaMNA2N1RuJXKLCnoA", - "decimals": 18, - "symbol": "PLP", - "tokenId": 0, - "standard": "fa12" - } - } - ] - }, - { - "symbol": "MIL", - "address": "KT1JWJSB6wkAEm3TGk9WUFHWNstBTKvuXsMC", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000006", - "tokenPool": "0.390000000000000000000000000000000000", - "address": "KT1LZqFas2GEUe5z5CFkL9Wqq6tZFzQbopm8", - "sharesTotal": "2", - "midPrice": "0.000015", - "token": { - "address": "KT1JWJSB6wkAEm3TGk9WUFHWNstBTKvuXsMC", - "decimals": 2, - "symbol": "MIL", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "B-PHX", + "standard": "fa2", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmY6rsFfBQxTneESd5emZhUo6hwa1RYUU7zakLJzDs86NS" + } + } + ] + }, + { + "symbol": "DRG", + "thumbnailUri": "https://i.ibb.co/FJdZMJ3/dragon.png", + "tokenId": 0, + "decimals": 9, + "address": "KT1Kiik6bpYEiRb5fQRj2gFHd4keRSGSikxU", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "3.746425", + "tokenPool": "19.263927064000000000000000000000000000", + "address": "KT1J2LLd59gTRWB2dM8vmun5fxSX8m3qBurf", + "sharesTotal": "8474067", + "midPrice": "0.194479", + "token": { + "address": "KT1Kiik6bpYEiRb5fQRj2gFHd4keRSGSikxU", + "decimals": 9, + "symbol": "DRG", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.ibb.co/FJdZMJ3/dragon.png" + } + } + ] + }, + { + "symbol": "ANG", + "thumbnailUri": "https://i.ibb.co/CB8RHjs/Anger.png", + "tokenId": 0, + "decimals": 9, + "address": "KT1KdV9rehYa7qM5wuNKm6verqYhSi17kRch", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1JUjWhM1BU3aRPnVmk4SrfrS6NYp6q5fUe", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1KdV9rehYa7qM5wuNKm6verqYhSi17kRch", + "decimals": 9, + "symbol": "ANG", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.ibb.co/CB8RHjs/Anger.png" + } + } + ] + }, + { + "symbol": "AGL", + "thumbnailUri": "https://i.ibb.co/xY44CXH/Angel.png", + "tokenId": 0, + "decimals": 9, + "address": "KT1RFdfyxSym4Pb2zrAe7FpQFHY26qX31UzC", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1NzLSMASQCJ4KRcrCpK2iJGfWvRAH1xXdz", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1RFdfyxSym4Pb2zrAe7FpQFHY26qX31UzC", + "decimals": 9, + "symbol": "AGL", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.ibb.co/xY44CXH/Angel.png" + } + } + ] + }, + { + "symbol": "WTR", + "thumbnailUri": "https://i.ibb.co/Xjfq08v/Water.png", + "tokenId": 0, + "decimals": 9, + "address": "KT1D7csF3qiJ8qpAEoWXykXfi66S8sbtXTMS", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1RAuRmFmCPTPwKkVR84w5RqQrHxb6eZJfr", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1D7csF3qiJ8qpAEoWXykXfi66S8sbtXTMS", + "decimals": 9, + "symbol": "WTR", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.ibb.co/Xjfq08v/Water.png" + } + } + ] + }, + { + "symbol": "AD", + "thumbnailUri": "https://www.vitamindoctor.com/fileadmin/content/com/Gesund_Werden/Medikamenteneinnahme/Antidepressiva/Antidepressiva_Headerbild_Tabletten.jpg", + "tokenId": 0, + "decimals": 6, + "address": "KT1UuNf13a9iiV5uacrTwRTPEA3tXqdbmbS6", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT18tKGWyriZRMCYA4o2g3F2QuaBNA2LHKRd", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1UuNf13a9iiV5uacrTwRTPEA3tXqdbmbS6", + "decimals": 6, + "symbol": "AD", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://www.vitamindoctor.com/fileadmin/content/com/Gesund_Werden/Medikamenteneinnahme/Antidepressiva/Antidepressiva_Headerbild_Tabletten.jpg" + } + } + ] + }, + { + "symbol": "GIF", + "thumbnailUri": "https://gif.games/wp-content/uploads/2020/11/gifgames-logo.gif", + "tokenId": 0, + "decimals": 6, + "address": "KT1RgYZfNphGmZzA8GdrDW8ZyoxfWvfPHRq3", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1DoRXdzo713W48pwd9EqFbELzqe7ba2AT5", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1RgYZfNphGmZzA8GdrDW8ZyoxfWvfPHRq3", + "decimals": 6, + "symbol": "GIF", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://gif.games/wp-content/uploads/2020/11/gifgames-logo.gif" + } + } + ] + }, + { + "symbol": "CHIPS", + "thumbnailUri": "https://i.ibb.co/G7FzzFK/Chips.png", + "tokenId": 0, + "decimals": 9, + "address": "KT1T62PhHmEoWeWWh6eHnQPxZ8bs4tCFXoc1", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1B9yqK8ji57UWdppBDUkV6R9ZHrBmeMxiU", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1T62PhHmEoWeWWh6eHnQPxZ8bs4tCFXoc1", + "decimals": 9, + "symbol": "CHIPS", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.ibb.co/G7FzzFK/Chips.png" + } + } + ] + }, + { + "symbol": "PENTA", + "thumbnailUri": "https://img.icons8.com/fluency/96/000000/bit-rate.png", + "tokenId": 0, + "decimals": 6, + "address": "KT1HMDDEwHLHcLs9YiLRx9GbSexww3439aca", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.073164", + "tokenPool": "1826639.101527000000000000000000000000000000", + "address": "KT1Vjp7tHoNXRPpd9BbGrq9pbxF1FxMFUFTE", + "sharesTotal": "2546301", + "midPrice": "0.000000", + "token": { + "address": "KT1HMDDEwHLHcLs9YiLRx9GbSexww3439aca", + "decimals": 6, + "symbol": "PENTA", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://img.icons8.com/fluency/96/000000/bit-rate.png" + } + } + ] + }, + { + "symbol": "PLENTY", + "thumbnailUri": "https://i.ibb.co/TcprBZM/plenty.png", + "tokenId": 0, + "decimals": 9, + "address": "KT1CU9BhZZ7zXJKwZ264xhzNx2eMNoUGVyCy", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1QncqJDYHtxygJhFM4nsyfJUezctH6kzw9", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1CU9BhZZ7zXJKwZ264xhzNx2eMNoUGVyCy", + "decimals": 9, + "symbol": "PLENTY", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.ibb.co/TcprBZM/plenty.png" + } + } + ] + }, + { + "symbol": "PHX", + "thumbnailUri": "https://i.ibb.co/KLw35WH/Phoenix.png", + "tokenId": 0, + "decimals": 9, + "address": "KT1JERPhrmVmvCpqoaBbGnYRd4RTayc4ziSf", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1FaVDVefpHDqnBPUTQ2HMV127tUsMZVArn", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1JERPhrmVmvCpqoaBbGnYRd4RTayc4ziSf", + "decimals": 9, + "symbol": "PHX", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.ibb.co/KLw35WH/Phoenix.png" + } + } + ] + }, + { + "symbol": "B-PHX", + "thumbnailUri": "https://i.ibb.co/TMLdrZC/Baby-Phoenix.png", + "tokenId": 0, + "decimals": 9, + "address": "KT1U1eQdv1g3L7C8vi1zi5K9t365c6GqCMUU", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1SaeuWSTnu8eonsxkU1VZw5X6fMURq5WVm", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { "address": "KT1U1eQdv1g3L7C8vi1zi5K9t365c6GqCMUU", + "decimals": 9, + "symbol": "B-PHX", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1SaeuWSTnu8eonsxkU1VZw5X6fMURq5WVm", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1U1eQdv1g3L7C8vi1zi5K9t365c6GqCMUU", - "decimals": 9, - "symbol": "B-PHX", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "CUU", - "address": "KT18jLqWNnbYeA2593macdnbc6tkaaudH5fh", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1W1hafYEzQkQLXyRPTxMeG3UaoUSsW7wNR", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT18jLqWNnbYeA2593macdnbc6tkaaudH5fh", - "decimals": 2, - "symbol": "CUU", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "FBI", + "standard": "fa2", + "thumbnailUri": "https://i.ibb.co/TMLdrZC/Baby-Phoenix.png" + } + } + ] + }, + { + "symbol": "ASTRO", + "thumbnailUri": "https://i.ibb.co/vmn6yzZ/astro.png", + "tokenId": 0, + "decimals": 9, + "address": "KT1BM6wDrSShVA7C7KGhbqRLgrHMkJQw6tUy", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1Pqm1agzKdaWh7yE4gwPwsRcr56KC5V7Zh", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1BM6wDrSShVA7C7KGhbqRLgrHMkJQw6tUy", + "decimals": 9, + "symbol": "ASTRO", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.ibb.co/vmn6yzZ/astro.png" + } + } + ] + }, + { + "symbol": "STR", + "thumbnailUri": "[url=https://imgbb.com/][img]https://i.ibb.co/zr40KHP/Strength.png[/img][/url]", + "tokenId": 0, + "decimals": 9, + "address": "KT1MVxThG9azXz2sBCcJjkRQErTEp7twd6dh", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1SfQm8qQ6pgv6Bt2pATxVu8dxqD8emnoo7", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1MVxThG9azXz2sBCcJjkRQErTEp7twd6dh", + "decimals": 9, + "symbol": "STR", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "[url=https://imgbb.com/][img]https://i.ibb.co/zr40KHP/Strength.png[/img][/url]" + } + } + ] + }, + { + "symbol": "MOVE", + "thumbnailUri": "https://i.ibb.co/TvsRH88/Move.png", + "tokenId": 0, + "decimals": 9, + "address": "KT1Mdx7g7NxwXXhyPib8SCa1J58JRZVcammG", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1QST2yGJDVHAP9fkvqDQKcjKdhvUXfzpmZ", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1Mdx7g7NxwXXhyPib8SCa1J58JRZVcammG", + "decimals": 9, + "symbol": "MOVE", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.ibb.co/TvsRH88/Move.png" + } + } + ] + }, + { + "symbol": "TZLA", + "thumbnailUri": "https://i.ibb.co/rQ9kMT7/TZLA.png", + "tokenId": 0, + "decimals": 4, + "address": "KT19kRZrVKAdSUTWVjH3EneNaAAQBk1zTCrr", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "6.501503", + "tokenPool": "60684558.619900000000000000000000000000000000", + "address": "KT1Hz5yAzhfcmFn2xna18MGXoRXvuyRobxRu", + "sharesTotal": "18777915", + "midPrice": "0.000000", + "token": { + "address": "KT19kRZrVKAdSUTWVjH3EneNaAAQBk1zTCrr", + "decimals": 4, + "symbol": "TZLA", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.ibb.co/rQ9kMT7/TZLA.png" + } + } + ] + }, + { + "symbol": "BELLS", + "thumbnailUri": "https://i.ibb.co/bBKn1hF/BELL.png", + "tokenId": 0, + "decimals": 9, + "address": "KT1CyQ88Bwd9swBVDZF3Vw5H4VNCFb6d1nXg", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1BCnxpRPwBFU9B66oMj3JABnsUwna3LyBa", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1CyQ88Bwd9swBVDZF3Vw5H4VNCFb6d1nXg", + "decimals": 9, + "symbol": "BELLS", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.ibb.co/bBKn1hF/BELL.png" + } + } + ] + }, + { + "symbol": "FBI", + "thumbnailUri": "https://i.ibb.co/7Y0n9wk/FBi.png", + "tokenId": 0, + "decimals": 9, + "address": "KT1K4nNb5acNLYiyBTpp4BmGMKvv2FPDRFrv", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1AUW3XVDxdQt3VTv8aRYhS5J7jtVyyd9GK", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { "address": "KT1K4nNb5acNLYiyBTpp4BmGMKvv2FPDRFrv", + "decimals": 9, + "symbol": "FBI", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1AUW3XVDxdQt3VTv8aRYhS5J7jtVyyd9GK", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1K4nNb5acNLYiyBTpp4BmGMKvv2FPDRFrv", - "decimals": 9, - "symbol": "FBI", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "CSC", - "address": "KT1Eh1hvFePfvzJqHwzhuaTesr7gd8zwtKpo", + "standard": "fa2", + "thumbnailUri": "https://i.ibb.co/7Y0n9wk/FBi.png" + } + } + ] + }, + { + "symbol": "ATM", + "thumbnailUri": "https://i.imgur.com/3CnzR87.png", + "tokenId": 0, + "decimals": 8, + "address": "KT1RmmFTZte4MibqBg9D126EHUmxqhd33owX", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.181071", + "tokenPool": "10.450676240000000000000000000000000000", + "address": "KT1EfAZDZBgiQTMjTJVHygaAThypBehYoNjF", + "sharesTotal": "14755986", + "midPrice": "0.017326", + "token": { + "address": "KT1RmmFTZte4MibqBg9D126EHUmxqhd33owX", + "decimals": 8, + "symbol": "ATM", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1JDWkiZaj5bYNMeUvjwNmKghwGXMNRQoP5", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1Eh1hvFePfvzJqHwzhuaTesr7gd8zwtKpo", - "decimals": 8, - "symbol": "CSC", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "ANG", - "address": "KT1KdV9rehYa7qM5wuNKm6verqYhSi17kRch", + "standard": "fa2", + "thumbnailUri": "https://i.imgur.com/3CnzR87.png" + } + } + ] + }, + { + "symbol": "ILTI", + "thumbnailUri": "https://i.ibb.co/0MksGHG/illuminati.png", + "tokenId": 0, + "decimals": 9, + "address": "KT1Tvh9PxYZeqDbxF8v8RCvkGuMoYFRCMXDU", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1CrrqYbBPhokSgNv299oN6AuV4SuLXtYuz", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1Tvh9PxYZeqDbxF8v8RCvkGuMoYFRCMXDU", + "decimals": 9, + "symbol": "ILTI", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.ibb.co/0MksGHG/illuminati.png" + } + } + ] + }, + { + "symbol": "PBJ", + "thumbnailUri": "https://i.ibb.co/92GNDvr/pbjtime-1.png", + "tokenId": 0, + "decimals": 6, + "address": "KT1GPS4MPmACD6yoaTCi1RUZRk39nYWs2796", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.182305", + "tokenPool": "5910023.934384000000000000000000000000000000", + "address": "KT1GFDagtGGQS1gmC3S6Noqns1svCTzL23By", + "sharesTotal": "10241698", + "midPrice": "0.000000", + "token": { + "address": "KT1GPS4MPmACD6yoaTCi1RUZRk39nYWs2796", + "decimals": 6, + "symbol": "PBJ", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1JUjWhM1BU3aRPnVmk4SrfrS6NYp6q5fUe", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1KdV9rehYa7qM5wuNKm6verqYhSi17kRch", - "decimals": 9, - "symbol": "ANG", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "$MOZ", - "address": "KT1GUnUAxdLUUPrA46hhjY7Pdv1CkppMZyXB", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1SFJpp5pRDpBPCbqGv529HrTZ6Dck3ZVf3", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1GUnUAxdLUUPrA46hhjY7Pdv1CkppMZyXB", - "decimals": 4, - "symbol": "$MOZ", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "AGL", - "address": "KT1RFdfyxSym4Pb2zrAe7FpQFHY26qX31UzC", + "standard": "fa2", + "thumbnailUri": "https://i.ibb.co/92GNDvr/pbjtime-1.png" + } + } + ] + }, + { + "symbol": "SIR", + "thumbnailUri": "https://cdn1.tissus-price.com/91293-tm_large_default/ecusson-brode-moustache-thermocollant-noir.jpg", + "tokenId": 0, + "decimals": 8, + "address": "KT1FdUMyYS4r8PP9Xa1dorD1Xk9wRE48zpzE", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.071784", + "tokenPool": "14095.327721770000000000000000000000000000", + "address": "KT191QXpM1L4E6nKBY8ixU7HSD4fxJiWMbkE", + "sharesTotal": "313872", + "midPrice": "0.000005", + "token": { + "address": "KT1FdUMyYS4r8PP9Xa1dorD1Xk9wRE48zpzE", + "decimals": 8, + "symbol": "SIR", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1NzLSMASQCJ4KRcrCpK2iJGfWvRAH1xXdz", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1RFdfyxSym4Pb2zrAe7FpQFHY26qX31UzC", - "decimals": 9, - "symbol": "AGL", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "DEW", - "address": "KT1PG1dTXsn27jjWtC58Yypddiq7JhpzG7ED", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT19Uhoj1xuMcqRiCNYxcGB2iv2yHGupxk6n", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1PG1dTXsn27jjWtC58Yypddiq7JhpzG7ED", - "decimals": 5, - "symbol": "DEW", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "CBR", - "address": "KT1DWp6Q7SmwMGDEdNZgJAJmkiPrsscEmM24", + "standard": "fa2", + "thumbnailUri": "https://cdn1.tissus-price.com/91293-tm_large_default/ecusson-brode-moustache-thermocollant-noir.jpg" + } + } + ] + }, + { + "symbol": "TEST3", + "thumbnailUri": "https://zzz.com/\"zzz'\">", + "tokenId": 0, + "decimals": 7, + "address": "KT1LeJPiUSQkKQnLgPoHNbtG3k6Q9irTds3d", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1LqDWKmRJF3hy4pBfG1y4r2N7VLjCiuZNU", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1LeJPiUSQkKQnLgPoHNbtG3k6Q9irTds3d", + "decimals": 7, + "symbol": "TEST3", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://zzz.com/\"zzz'\">" + } + } + ] + }, + { + "symbol": "ODR", + "thumbnailUri": "https://i.ibb.co/JpBJrx6/Order.png", + "tokenId": 0, + "decimals": 9, + "address": "KT1KzAhxTJcXwiApWqGXn4RiF1DnJdrQfHYo", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1BfVDF4McdM9vSCsBRQ2yAGJaNVdwWH17u", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1KzAhxTJcXwiApWqGXn4RiF1DnJdrQfHYo", + "decimals": 9, + "symbol": "ODR", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.ibb.co/JpBJrx6/Order.png" + } + } + ] + }, + { + "symbol": "BRG", + "thumbnailUri": "https://i.ibb.co/yPNVcw0/bridges.png", + "tokenId": 0, + "decimals": 5, + "address": "KT1NvWaKSdPPo3TEGbCRpAWYcPkFNwHvirjJ", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1P6epcVMWamLGSfnaN6Hme5EP27HQBWqtB", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1NvWaKSdPPo3TEGbCRpAWYcPkFNwHvirjJ", + "decimals": 5, + "symbol": "BRG", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.ibb.co/yPNVcw0/bridges.png" + } + } + ] + }, + { + "symbol": "KRYPTO", + "thumbnailUri": "https://ipfs.io/ipfs/QmdSk5m6oyXgN8egM2cG46Yo31k2rS8QJMdgy9SkfZgbHx", + "tokenId": 0, + "decimals": 8, + "address": "KT1E1jhZ7tadsDWgzrCKZzieatn4dQVXDLAk", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "28.160609", + "tokenPool": "1735190.163076930000000000000000000000000000", + "address": "KT1ELT5Bon7FZVpvEEGiQqpnxWEKAbCSky4d", + "sharesTotal": "15424052", + "midPrice": "0.000016", + "token": { + "address": "KT1E1jhZ7tadsDWgzrCKZzieatn4dQVXDLAk", + "decimals": 8, + "symbol": "KRYPTO", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://ipfs.io/ipfs/QmdSk5m6oyXgN8egM2cG46Yo31k2rS8QJMdgy9SkfZgbHx" + } + } + ] + }, + { + "symbol": "UNICORN", + "thumbnailUri": "https://i.imgur.com/h12E9Hh.png", + "tokenId": 0, + "decimals": 8, + "address": "KT1DmR7Rq1Ke5ULzXaPjcHjfBj1k376KrR9c", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.088600", + "tokenPool": "127804.127832340000000000000000000000000000", + "address": "KT1L1TFirUokGGfvX6zx7QQfKEYCu93oeRJA", + "sharesTotal": "23196676", + "midPrice": "0.000001", + "token": { + "address": "KT1DmR7Rq1Ke5ULzXaPjcHjfBj1k376KrR9c", + "decimals": 8, + "symbol": "UNICORN", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1HXmmPQfftmwJEWTjJLfz2aMVwmZfKVLGD", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1DWp6Q7SmwMGDEdNZgJAJmkiPrsscEmM24", - "decimals": 3, - "symbol": "CBR", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "SMC", - "address": "KT1GUw9a8ipuxcyEreuF4b6xKjUMr448tqKT", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1EAveAZTDnhnh3BeTDCVS9BWdt2kiWttRd", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1GUw9a8ipuxcyEreuF4b6xKjUMr448tqKT", - "decimals": 10, - "symbol": "SMC", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "BTC2", - "address": "KT1P8qj6uVynf7d6wzqvuaxjYZzys5kKiVLb", + "standard": "fa2", + "thumbnailUri": "https://i.imgur.com/h12E9Hh.png" + } + } + ] + }, + { + "symbol": "DARK", + "thumbnailUri": "https://cdn.discordapp.com/attachments/688132602086948868/872547598706278410/DARK_coin.png", + "tokenId": 0, + "decimals": 8, + "address": "KT1CYyafaf8FybXzny7VZK93tfktVSw1N3Rd", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "4.337952", + "tokenPool": "2.938007090000000000000000000000000000", + "address": "KT1UUbdvhUXW9j7oRbQdQHnPCFisn4qv19BK", + "sharesTotal": "8737724", + "midPrice": "1.476495", + "token": { + "address": "KT1CYyafaf8FybXzny7VZK93tfktVSw1N3Rd", + "decimals": 8, + "symbol": "DARK", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://cdn.discordapp.com/attachments/688132602086948868/872547598706278410/DARK_coin.png" + } + } + ] + }, + { + "symbol": "PNTA", + "thumbnailUri": "https://i.ibb.co/vmCH968/Penta.png", + "tokenId": 0, + "decimals": 6, + "address": "KT1Di5SiUQ9Muqr8uwruzv3roigzuEss2G9o", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1SQX4QU5QGMc6ZdJmgj82Z5XfmmnaLBvjb", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1Di5SiUQ9Muqr8uwruzv3roigzuEss2G9o", + "decimals": 6, + "symbol": "PNTA", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.ibb.co/vmCH968/Penta.png" + } + } + ] + }, + { + "symbol": "REDK", + "thumbnailUri": "https://ipfs.io/ipfs/QmcHJRnsm2cjFpB1MoDoPvQ5bEmC5QXovFN1AoTq7wNnPi", + "tokenId": 0, + "decimals": 8, + "address": "KT1QVHqdwbi5qfSUGPApgce9gxoo9JxpAx4k", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "17.162178", + "tokenPool": "754228.296998420000000000000000000000000000", + "address": "KT1DmVZ3fNESMFcbnzbSaRNV16vjvb4a988b", + "sharesTotal": "3558423", + "midPrice": "0.000023", + "token": { + "address": "KT1QVHqdwbi5qfSUGPApgce9gxoo9JxpAx4k", + "decimals": 8, + "symbol": "REDK", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://ipfs.io/ipfs/QmcHJRnsm2cjFpB1MoDoPvQ5bEmC5QXovFN1AoTq7wNnPi" + } + } + ] + }, + { + "symbol": "BALEC", + "thumbnailUri": "https://ibb.co/s6hGhwM", + "tokenId": 0, + "decimals": 5, + "address": "KT1LLuto9MVbAPLGEjq91LbfXGt44SVcD3r4", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "2.042234", + "tokenPool": "911016.810120000000000000000000000000000000", + "address": "KT1Qd3TGH4B9hJEAKc4TeRJr4HsfSKLF99P3", + "sharesTotal": "1360666", + "midPrice": "0.000002", + "token": { + "address": "KT1LLuto9MVbAPLGEjq91LbfXGt44SVcD3r4", + "decimals": 5, + "symbol": "BALEC", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://ibb.co/s6hGhwM" + } + } + ] + }, + { + "symbol": "KYLE", + "thumbnailUri": "https://img.icons8.com/nolan/96/winter.png", + "tokenId": 0, + "decimals": 6, + "address": "KT1C7kg33b39TYR7t1ZJi5SCdNB6RVn8pY54", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1H9eao2GX11P9tJUSudV2md6tJ88Vy5Vdo", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1C7kg33b39TYR7t1ZJi5SCdNB6RVn8pY54", + "decimals": 6, + "symbol": "KYLE", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://img.icons8.com/nolan/96/winter.png" + } + } + ] + }, + { + "symbol": "BUFF", + "thumbnailUri": "https://img.icons8.com/ios/100/fa314a/year-of-ox.png", + "tokenId": 0, + "decimals": 6, + "address": "KT1Ka7jn8G7xFf2bcJr5ujW9XtxSJL3b3CXH", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1HEsNQQ97gpYSA2LtKaU945HkhvA1BbBdn", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1Ka7jn8G7xFf2bcJr5ujW9XtxSJL3b3CXH", + "decimals": 6, + "symbol": "BUFF", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://img.icons8.com/ios/100/fa314a/year-of-ox.png" + } + } + ] + }, + { + "symbol": "TzSHIBA", + "thumbnailUri": "https://s2.coinmarketcap.com/static/img/coins/128x128/5994.png", + "tokenId": 0, + "decimals": 6, + "address": "KT1EXQDkQK5eW7hKZdMYYcwoVpHmGfXkd5QR", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1U2UWNUvqw6hfgGH3g5goXUGZ7uzm3L6Ed", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1EXQDkQK5eW7hKZdMYYcwoVpHmGfXkd5QR", + "decimals": 6, + "symbol": "TzSHIBA", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1N25Lxf3hQJ22FdwtWNAwLCoZeTVpDbUAM", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1P8qj6uVynf7d6wzqvuaxjYZzys5kKiVLb", - "decimals": 6, - "symbol": "BTC2", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "MAGIC", + "standard": "fa2", + "thumbnailUri": "https://s2.coinmarketcap.com/static/img/coins/128x128/5994.png" + } + } + ] + }, + { + "symbol": "MAGIC", + "thumbnailUri": "https://i.imgur.com/d5caXtL.png", + "tokenId": 0, + "decimals": 4, + "address": "KT1KHSh8ty6wVq7q9Uz3DGRnGvn7yrxbJByK", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1VA7nExDqyb5ieqVNy6Y67FYoPDt2Vx7sz", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { "address": "KT1KHSh8ty6wVq7q9Uz3DGRnGvn7yrxbJByK", + "decimals": 4, + "symbol": "MAGIC", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1VA7nExDqyb5ieqVNy6Y67FYoPDt2Vx7sz", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1KHSh8ty6wVq7q9Uz3DGRnGvn7yrxbJByK", - "decimals": 4, - "symbol": "MAGIC", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { + "standard": "fa2", + "thumbnailUri": "https://i.imgur.com/d5caXtL.png" + } + } + ] + }, + { + "symbol": "POKE", + "thumbnailUri": "https://i.ibb.co/8YBpdKW/pokeball.png", + "tokenId": 0, + "decimals": 6, + "address": "KT1LPPBBjAcE3A9tnrVaY6bJBSTiHZ9SWbGT", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1S1SBkNY7zeA5aKN7j9WrPg7SK6B8cJkYp", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1LPPBBjAcE3A9tnrVaY6bJBSTiHZ9SWbGT", + "decimals": 6, + "symbol": "POKE", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.ibb.co/8YBpdKW/pokeball.png" + } + } + ] + }, + { + "symbol": "ASTRO", + "thumbnailUri": "https://i.imgur.com/IKQOotJ.png", + "tokenId": 0, + "decimals": 8, + "address": "KT18hk7XMJZe7B8M2yipBV2vnfk2Vs19BqMC", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1R5FwSL7i3U3v6SFpVUnDq9ngri3R2gELa", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT18hk7XMJZe7B8M2yipBV2vnfk2Vs19BqMC", + "decimals": 8, + "symbol": "ASTRO", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.imgur.com/IKQOotJ.png" + } + } + ] + }, + { + "symbol": "rkDAO", + "thumbnailUri": "https://i.ibb.co/3m7xx5C/Rocket-9.png", + "tokenId": 0, + "decimals": 8, + "address": "KT1EVgxdnx9UZGNq9PTohB9gYH9zKmwf9yv8", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1MUEGM19EidcyfPfxNjWqkyPMWzh4tfm1b", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1EVgxdnx9UZGNq9PTohB9gYH9zKmwf9yv8", + "decimals": 8, "symbol": "rkDAO", - "address": "KT1FzK2HcGKQ7W6x94gKy8KZWw5Bdww7AvUo", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1QhWpeyUBAG1SvSonnoSDQ3vuidMAkpPt7", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1FzK2HcGKQ7W6x94gKy8KZWw5Bdww7AvUo", - "decimals": 8, - "symbol": "rkDAO", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "AXPR", - "address": "KT1V45zNYwcpF3E9NgtqRoJsbw7UZFxCzLXw", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1JcbvDehU6ioqYmNZgZcRNTe9QbVarvxMx", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1V45zNYwcpF3E9NgtqRoJsbw7UZFxCzLXw", - "decimals": 6, - "symbol": "AXPR", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "MAGI", + "standard": "fa2", + "thumbnailUri": "https://i.ibb.co/3m7xx5C/Rocket-9.png" + } + } + ] + }, + { + "symbol": "Zeus", + "thumbnailUri": "https://img.icons8.com/nolan/64/Greek-God-Zeus.png", + "tokenId": 0, + "decimals": 6, + "address": "KT1Mn1N9jVFWHPWgtZHBoMEGqsupreBYEXvb", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1TFto9kmyAfaZKB8dJV9MAep9WDfJPRKen", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1Mn1N9jVFWHPWgtZHBoMEGqsupreBYEXvb", + "decimals": 6, + "symbol": "Zeus", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://img.icons8.com/nolan/64/Greek-God-Zeus.png" + } + } + ] + }, + { + "symbol": "Grape", + "thumbnailUri": "https://img.icons8.com/cotton/64/000000/grape.png", + "tokenId": 0, + "decimals": 6, + "address": "KT1R3PFCun1FsSzH25WXUXKL6cuoE6rGs8Eh", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1HB2NhKgjLwxLGHQFLPCj27CX7KBDgXYBA", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1R3PFCun1FsSzH25WXUXKL6cuoE6rGs8Eh", + "decimals": 6, + "symbol": "Grape", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://img.icons8.com/cotton/64/000000/grape.png" + } + } + ] + }, + { + "symbol": "MAGI", + "thumbnailUri": "https://i.ibb.co/jHJhjSN/Magikarp.png", + "tokenId": 0, + "decimals": 6, + "address": "KT1Mwwd8RSh2LR7ADPbeTxiCbQTjB86rUr21", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1DvnCDXkR6XVBAJ5FzwRdYqycMgZuoGQav", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { "address": "KT1Mwwd8RSh2LR7ADPbeTxiCbQTjB86rUr21", + "decimals": 6, + "symbol": "MAGI", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1DvnCDXkR6XVBAJ5FzwRdYqycMgZuoGQav", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1Mwwd8RSh2LR7ADPbeTxiCbQTjB86rUr21", - "decimals": 6, - "symbol": "MAGI", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "ZNA", - "address": "KT19Eb7YwFTqaiHhtbe92boK23jUJjAAAwGy", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1Wggn79TRcKuBD74uLtnyUg7DdJtLeLb5x", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT19Eb7YwFTqaiHhtbe92boK23jUJjAAAwGy", - "decimals": 5, - "symbol": "ZNA", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "TzSHIBA", - "address": "KT1EXQDkQK5eW7hKZdMYYcwoVpHmGfXkd5QR", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1U2UWNUvqw6hfgGH3g5goXUGZ7uzm3L6Ed", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1EXQDkQK5eW7hKZdMYYcwoVpHmGfXkd5QR", - "decimals": 6, - "symbol": "TzSHIBA", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "BTC5", - "address": "KT1LoSAeGphkrobjGMYouXLFyMF2ds6oJNTL", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1TBHqcaKywLLftJVerYxtBLcuQktfm8Jd1", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1LoSAeGphkrobjGMYouXLFyMF2ds6oJNTL", - "decimals": 6, - "symbol": "BTC5", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "SCAM", - "address": "KT1P2RmgwuYXwDrprrcBVX6YNHmFruwQKSwE", + "standard": "fa2", + "thumbnailUri": "https://i.ibb.co/jHJhjSN/Magikarp.png" + } + } + ] + }, + { + "symbol": "DELTA", + "thumbnailUri": "https://img.icons8.com/plasticine/100/26e07f/delta.png", + "tokenId": 0, + "decimals": 6, + "address": "KT1TULiu4n59vJRrJ44wKo8dk8BhvZdrZCLZ", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1RFcVz8KKkRgY54TmWCGUb9sP5bfAD76yC", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1TULiu4n59vJRrJ44wKo8dk8BhvZdrZCLZ", + "decimals": 6, + "symbol": "DELTA", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://img.icons8.com/plasticine/100/26e07f/delta.png" + } + } + ] + }, + { + "symbol": "SAVEUP", + "thumbnailUri": "https://img.icons8.com/dusk/64/000000/money-box.png", + "tokenId": 0, + "decimals": 6, + "address": "KT1R8Dtyh43as4Qyn5CML5NGQLy92Ur1JrUr", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1DYLV56LjgGMTMAX2Y1NFFyGXtR4J43zPo", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1R8Dtyh43as4Qyn5CML5NGQLy92Ur1JrUr", + "decimals": 6, + "symbol": "SAVEUP", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://img.icons8.com/dusk/64/000000/money-box.png" + } + } + ] + }, + { + "symbol": "TZK", + "thumbnailUri": "https://i.imgur.com/cFPOQkp.png", + "tokenId": 0, + "decimals": 8, + "address": "KT1JoBx9GQmWZts7vdUEe5uU2wsWZiAhrepf", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "125.126869", + "tokenPool": "5386409.391375490000000000000000000000000000", + "address": "KT1StK6SjE5TsxpCpKPBHwrVs7VpND5L97jK", + "sharesTotal": "297848187", + "midPrice": "0.000023", + "token": { + "address": "KT1JoBx9GQmWZts7vdUEe5uU2wsWZiAhrepf", + "decimals": 8, + "symbol": "TZK", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.imgur.com/cFPOQkp.png" + } + } + ] + }, + { + "symbol": "JDAO", + "thumbnailUri": "https://img.icons8.com/office/80/000000/jake.png", + "tokenId": 0, + "decimals": 6, + "address": "KT1WGvBtUKvqF3Am64CXahfBPKnmaYKikwRZ", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT19NrFKnfEq4s3pgTg9sDrtgtJy95Eqaqgz", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1WGvBtUKvqF3Am64CXahfBPKnmaYKikwRZ", + "decimals": 6, + "symbol": "JDAO", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://img.icons8.com/office/80/000000/jake.png" + } + } + ] + }, + { + "symbol": "SNTNL", + "thumbnailUri": "https://1.bp.blogspot.com/-aOX3QHDi75o/TeUiOkjyRLI/AAAAAAAAACA/VR_apIhqKq8/s1600/Sentinel_Logo_Comp3.jpg", + "tokenId": 0, + "decimals": 8, + "address": "KT1928bxTqRym3TmLvyYwXuXfMr5GTE6kZ5C", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.281957", + "tokenPool": "1439.200698970000000000000000000000000000", + "address": "KT1SjpvoieZjxGhoVuhvWbJGiwAvZXuDkdPN", + "sharesTotal": "4443526", + "midPrice": "0.000196", + "token": { + "address": "KT1928bxTqRym3TmLvyYwXuXfMr5GTE6kZ5C", + "decimals": 8, + "symbol": "SNTNL", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1UWJJB4KsAQgFCcVjDZAF8jzb7ES8Dn4si", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1P2RmgwuYXwDrprrcBVX6YNHmFruwQKSwE", - "decimals": 8, - "symbol": "SCAM", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "AD", - "address": "KT1UuNf13a9iiV5uacrTwRTPEA3tXqdbmbS6", + "standard": "fa2", + "thumbnailUri": "https://1.bp.blogspot.com/-aOX3QHDi75o/TeUiOkjyRLI/AAAAAAAAACA/VR_apIhqKq8/s1600/Sentinel_Logo_Comp3.jpg" + } + } + ] + }, + { + "symbol": "DRUG", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 8, + "address": "KT1WpRmhPLkdt1gMYgavqYQ2MXpfCugzo4yb", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.076110", + "tokenPool": "0.304069900000000000000000000000000000", + "address": "KT1EwTnttNBYCDRKoWcaL8ZvjbhNGBSbbRkR", + "sharesTotal": "149264", + "midPrice": "0.250304", + "token": { + "address": "KT1WpRmhPLkdt1gMYgavqYQ2MXpfCugzo4yb", + "decimals": 8, + "symbol": "DRUG", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT18tKGWyriZRMCYA4o2g3F2QuaBNA2LHKRd", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1UuNf13a9iiV5uacrTwRTPEA3tXqdbmbS6", - "decimals": 6, - "symbol": "AD", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "S-RCKT", - "address": "KT1X8ggJYL7YopeProUe5o3bL1MfDz2hrJTu", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1QzgHgH8EoqFkjYQLZhPgpKDHHWd6xupnP", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1X8ggJYL7YopeProUe5o3bL1MfDz2hrJTu", - "decimals": 6, - "symbol": "S-RCKT", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "UNODAO", - "address": "KT1KsK1ceRYetZmNTbtTfPjoTYyr3zHc3omC", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1Ha8riSzjcCZSCNEQWpFGWnB1DbmwkgfT3", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1KsK1ceRYetZmNTbtTfPjoTYyr3zHc3omC", - "decimals": 8, - "symbol": "UNODAO", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "PEPE", - "address": "KT1QkLuPFb7PvR1hB33Bymruie8p5Yx8mUVB", + "standard": "fa2", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "FAN8", + "thumbnailUri": "https://sg-res.9appsinstall.com/sg/res/jpg/35/84/54739fb93c65a464db19c44d9a4a-e5f1.jpg", + "tokenId": 0, + "decimals": 6, + "address": "KT1BWvkCamCVgAbSJwZn2hriECV2uChm1Hn8", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1M7gEK9tQaycUi5BsNj64kdNVCB8Vq4nNW", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1BWvkCamCVgAbSJwZn2hriECV2uChm1Hn8", + "decimals": 6, + "symbol": "FAN8", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT19xVDAmh9z3mm8TSpBfSxWpEytgsQSD9p3", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1QkLuPFb7PvR1hB33Bymruie8p5Yx8mUVB", - "decimals": 6, - "symbol": "PEPE", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "BTC4", - "address": "KT1MrddXSC95aFLjGBDpwJkAiiSTRi1FA2np", + "standard": "fa2", + "thumbnailUri": "https://sg-res.9appsinstall.com/sg/res/jpg/35/84/54739fb93c65a464db19c44d9a4a-e5f1.jpg" + } + } + ] + }, + { + "symbol": "VER", + "thumbnailUri": "https://i.imgur.com/Wlcmxai.png", + "tokenId": 0, + "decimals": 6, + "address": "KT1CUE6FVUBEaWYz6bAEubofSTvLHYkPtuDP", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1AySctZfGPtjLE7y6kiRPagPc41HNZRN6B", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1CUE6FVUBEaWYz6bAEubofSTvLHYkPtuDP", + "decimals": 6, + "symbol": "VER", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.imgur.com/Wlcmxai.png" + } + } + ] + }, + { + "symbol": "AXPR", + "thumbnailUri": "https://s2.coinmarketcap.com/static/img/coins/200x200/2466.png", + "tokenId": 0, + "decimals": 6, + "address": "KT1V45zNYwcpF3E9NgtqRoJsbw7UZFxCzLXw", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1JcbvDehU6ioqYmNZgZcRNTe9QbVarvxMx", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1V45zNYwcpF3E9NgtqRoJsbw7UZFxCzLXw", + "decimals": 6, + "symbol": "AXPR", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1JFaoRJMBW1XzKfuoPPxaLJ62Vubc4nrsB", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1MrddXSC95aFLjGBDpwJkAiiSTRi1FA2np", - "decimals": 6, - "symbol": "BTC4", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "BRKBLD", - "address": "KT1HRY6ERNuudrU3cFKp2tYTKFNKKdg7FJHy", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1VTUQWz6kccmZGDZpuJkY66k5hqrpMTZ9D", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1HRY6ERNuudrU3cFKp2tYTKFNKKdg7FJHy", - "decimals": 6, - "symbol": "BRKBLD", - "tokenId": 0, - "standard": "fa2" - } - } - ] - } - ] + "standard": "fa2", + "thumbnailUri": "https://s2.coinmarketcap.com/static/img/coins/200x200/2466.png" + } + } + ] + }, + { + "symbol": "OPIUM", + "thumbnailUri": "https://s2.coinmarketcap.com/static/img/coins/200x200/7230.png", + "tokenId": 0, + "decimals": 6, + "address": "KT1CMUnApNfRrun6rmJX8zzFbASfvCWmCiYF", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1MTUHV8VK5P2FCEwSqeKhj5x4zWcNTLH1t", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1CMUnApNfRrun6rmJX8zzFbASfvCWmCiYF", + "decimals": 6, + "symbol": "OPIUM", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://s2.coinmarketcap.com/static/img/coins/200x200/7230.png" + } + } + ] + } + ] } -} \ No newline at end of file + } \ No newline at end of file diff --git a/Tests/KukaiCoreSwiftTests/Stubs/dipdup_dex_exchange_response_4.json b/Tests/KukaiCoreSwiftTests/Stubs/dipdup_dex_exchange_response_4.json index 3fe24251..4e0e474a 100644 --- a/Tests/KukaiCoreSwiftTests/Stubs/dipdup_dex_exchange_response_4.json +++ b/Tests/KukaiCoreSwiftTests/Stubs/dipdup_dex_exchange_response_4.json @@ -1,1304 +1,2481 @@ { "data": { - "token": [ - { - "symbol": "OPIUM", - "address": "KT1CMUnApNfRrun6rmJX8zzFbASfvCWmCiYF", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1MTUHV8VK5P2FCEwSqeKhj5x4zWcNTLH1t", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1CMUnApNfRrun6rmJX8zzFbASfvCWmCiYF", - "decimals": 6, - "symbol": "OPIUM", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "TEST3", - "address": "KT1LeJPiUSQkKQnLgPoHNbtG3k6Q9irTds3d", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1LqDWKmRJF3hy4pBfG1y4r2N7VLjCiuZNU", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1LeJPiUSQkKQnLgPoHNbtG3k6Q9irTds3d", - "decimals": 7, - "symbol": "TEST3", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "LOLI", - "address": "KT1UyhoWg6nTuHeTCJme6okxWzgUY4eJrLb9", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1Hn6ukPY6rj8VqZ84a9rGjkNb34Wzd58QW", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1UyhoWg6nTuHeTCJme6okxWzgUY4eJrLb9", - "decimals": 0, - "symbol": "LOLI", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "PLENTY", - "address": "KT1CU9BhZZ7zXJKwZ264xhzNx2eMNoUGVyCy", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1QncqJDYHtxygJhFM4nsyfJUezctH6kzw9", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1CU9BhZZ7zXJKwZ264xhzNx2eMNoUGVyCy", - "decimals": 9, - "symbol": "PLENTY", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, + "token": [ + { + "symbol": "ATEZ", + "thumbnailUri": "https://i.imgur.com/A9sJq5x.png", + "tokenId": 0, + "decimals": 8, + "address": "KT1TT8AoDbnvmTs9VGHqVoiKnPHhaWDyGCaJ", + "exchanges": [ { - "symbol": "BGCN", - "address": "KT1LoC4CV7oiLoQj29dZ91iMkdsGcqgJ4KhL", + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1Py9yhH8X2y6V2W8X7KfWmagZ8aYBA3Nf1", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1TT8AoDbnvmTs9VGHqVoiKnPHhaWDyGCaJ", + "decimals": 8, + "symbol": "ATEZ", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1UGs3mVuRowjBiUVen1FM2gCmc7yzBmC2o", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1LoC4CV7oiLoQj29dZ91iMkdsGcqgJ4KhL", - "decimals": 4, - "symbol": "BGCN", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "ASTRO", - "address": "KT18hk7XMJZe7B8M2yipBV2vnfk2Vs19BqMC", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1R5FwSL7i3U3v6SFpVUnDq9ngri3R2gELa", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT18hk7XMJZe7B8M2yipBV2vnfk2Vs19BqMC", - "decimals": 8, - "symbol": "ASTRO", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "ODR", - "address": "KT1KzAhxTJcXwiApWqGXn4RiF1DnJdrQfHYo", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1BfVDF4McdM9vSCsBRQ2yAGJaNVdwWH17u", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1KzAhxTJcXwiApWqGXn4RiF1DnJdrQfHYo", - "decimals": 9, - "symbol": "ODR", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "CSC", - "address": "KT1DnT2NsRZ4h2M3gAjZbbhaemVzpvjeNQF2", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1GxaBbv4tNyAYr6TiRKfVcpyFPjz1hurXF", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1DnT2NsRZ4h2M3gAjZbbhaemVzpvjeNQF2", - "decimals": 8, - "symbol": "CSC", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, + "standard": "fa2", + "thumbnailUri": "https://i.imgur.com/A9sJq5x.png" + } + } + ] + }, + { + "symbol": "PLAT", + "thumbnailUri": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOEAAADhCAMAAAAJbSJIAAAA81BMVEX///93pL0zMzP4smqrws7v7+8lJSUpKSmjo6MWFhb8tWvq6uofHx+CgoJrnbggKTC+jFnExMQaGhouLi73+vsoKCh6qcMiIiL/uW0SEhJBQUHNzc0tKCT09PQ1NTUtMDIkKzC6urri4uKsrKyWlpbY2NhiYmIVJC5ZWVmenp51dXWGhoZubm7JyclRUVFISEiAY0a+0t7k7PFqVUCugVPtq2eTb0w5PkGRs8XR3+dHPzhZSjxCPDbfomPSmV62hlZ5XkSgeE9pjaJbd4dUbHljhJbZ5eyevc+zy9lgTj0AAAAAFypuV0FIWWJEUVlPZHArIhtEoPWJAAAOzUlEQVR4nO1da1fjOBINoZNgYxJiJyQB8oAAAcKrh0d3A+HRPTNMz9Iz+/9/zcZWlS05si3bZeI9x/fDHPpMInwtqa6qriRKpQIFChQoUKBAgQIFChQoUKBAgQIFFtDqVyrr65V+a9kPkgH65+Pp0bZV65iaabStwcXGSXN/2Q9FhvW96WXPqLYtq+zCqlUNzTodHy774dKjMj42jRrHjce8SwcH/99d2TzSOgHssDOrvcuT/rKfMyH6azUjnB6S1E4z7Mj1o/WMWj5odxTowXDVzrLieNDrHGXS8NioyqgMHcg4/r1RyeAxmoP5a9bO6Rs+vDT81EaNRqN8/3D98v7zfjD/uTHyEW0bY+rH2D/W7GlibVM3XJr2LJHd5PHq5mm22u12dV23/zt7er57aDREksYl8VCdwnvunNC2u79dFeg1Hm5muo1VDva/bzdfRgJJyyTuxho0rJHOgLHGdeBwcv866wrceJrd1c3ryYjjaJ5RPkppz4RZTtnshsbz+7mpB9FDkrOrBsexuk0a24/hbfd2yJo84iRicv0U2H08x9u7iTdWrQ7lSm6/B61SBZv+dtt91MbjpgI/RnL2PvEoak2ip7ExhQcy1kiaqwzcKTicvEaMTwHdp0dvqPb2SJ7GQQtfuUkRbPpe9jC6n8XgZ3ej/jLJhOIYg81p+rZa2y7BydVqPIJ2Nz57ykEYGEoX8FRa+vl9UXMJPnfj8rO7cTZwKZp02n+IweYybUunbhRtbCYhOKd4e4+T0SrTZVSnGGxSLifGqIPD0VPsEYoUV38ixdoxDb05+rjEaqd6azgW5gxjxhiRo0vROKBiOM9zgOFGmlZcnZgk7kGGe5yLGl20wRDYSxFsNnAkTDbTEdRvH4GiZZEx3MFgc5G4iUOchJObZEGGp9iAtqpTMoqnEObNxEKLw2D0kpbgnOImSn+aQSWigj3QTliMxqk8fEzNb47uFUQbiy6erhmpxoW79mukCaMedIw2Jt0a3A02iZYSBxBmRq/px6jDcAbjlLDA4gabJOOihVWnAUkPrnLjlLATz1IEm7UOjVDwwJmYei3pYh2DTQIRArEf/qQjqN+AZJh0Cf8JdEQ19mKpadIsZkSKA9YoRVaHwGVX7LzlDLrwnibMAMNXGKcaXY5xriULNi0IUg3CWWgDBMMgTPePMBeOF7/2YHg/0hLU71gnWoS2yjrMJ2sQ62vwYkavxAxREw3CcjUKdydOsOljnKFZznjowsKGcpi6Vf5ejLLzuZFBnLGBsaaWKm31IUmV/6CdySCdA4dpmZChW+WPYSlCrY5UDBn0x/gjKhJulV852OA0HFLzmzN8yWAilqYYbFSr/IcmrNiop6G3cmvTlaTmaGE9SbXKD2qYwTR09YJSEUtcsFFcD55UM1nQMABDuvzCgVvlV6vlQYmnQR9o5ooI46lGu9FvH9JZxTcH0Xfi+PLqUGN4zUKNRhVM95s2dlAxOgfnzWhsQyjdjIdbFYb6FWNIliPu/W3YcB2ytqEA/HAjFv6j1Ie4+Dapit8Q+D8CagUdXLcZVFua+lrEc5FBsd6h3wBDqnJUS2UfIQ3DKzWGz0zy6RY1Fx9FUXF9QN6HWHDJHo3nePOQjCEkQmWrWnW51qqUQIZq6wPyWFoaszWmdbq2dgkUaxtrhBiDejaU5HCuh8CQrGbaZOpWPUlZ5Q8G9KFiqqW/w5qGbF/GPhNEZ9Gd3lKUAA2OR7VUqwtV4SpZybTPOs6xgiu4WrEIl73wCofXagx1yC0Id/iC5DsJvlvlp7OaSzuM4ehObeWdQX4I8cVwRgVW+elmQcx0GQW/TfiOYfIxTkmr/CE4iJUuY2rRIQwFIIiw0j2CYKOR/YZ46TJ63YSDCEdRh+3/WndzDar2MV1Wk8NbqJfWqH59ya1fY3HrILGlGACI/sNYq1JKB7G0z6aeW/Iu4/4FmjJCizU/fFBi2H0Y8iOKBv2OKEBNDDY08Rpe4PBdiSEOUpN07z5sOunhv2Nbiq1+yAlYmARqcoiJRYqtaDJAKOhhOXgdl6cKwWZOrsIQtMiClf3oRqkPYdKSDtJSaYOFc28x71qK4QeHWkgOIP8UiJGSHKLce2+bBlDB5lJOFIzg2eAjF0IRMmylrWEohsQlfRTEqufLRFmKUn6VinQywiwfKcihvon7aYiPDkJBscatBI9Dq/xyfgGdiBazShfCNtqYewqiATuj+KGxj4ohy2ECelDOEBKy4UN07qS/QhfSH7qEDJH3LNBSlBwcagUSlA1TtBpfovvwFre1UXehu67id9K2cHAtbvsI7kKZYjSV5bD7PsyqC1HihSOXwZZiMEHZMB1D7hRZStRv6LeXupiCIAphBSvFC4eR4jGcKuZO+gy3shOeR3CxBoIopISBB4fCGC5ORJDDySyqC/E4AmlWgeAKivMZCMCljh1sWjwq68Ho8x902gY5bEQRdE/NmFlcJoGC6OxD+lYHrOzC76zWBXz9FIw3/oMORZjOETv8ui9IkK62wKPCHoPVZn6rrzBs/QCK1q+tFQ5hDD/xH7RbA62N2JfSvXLPk2QxRj2HzdkL3a+7j/gFfu3ud/7Bt8IYcu/iq90aymGos6a7BLOIow6woOiMK4/hdxynX4RODGP41fvYm93YHshhWClRv0aCZSOrC0kg4LGt0Fxv/QOdu/uDp/imxLD+2W7sJFIO9dUH97Qz5TFZEZDDMUHkuqGOnWipTkSO4Te7sY0oOew+eYdkKY86+wALD1aF5aLF1u+yYBPG0PtY/Te7sWPMDgM6UH/1znJrNIfnpYBaCisgfq5zFAeyYBPCkOt/Z1KjHMq7sDv76U7Bco90r54PvMM2F0SO4R/YiXywUQo0dbstPIwrddb0Vf7eiF6GPeg5bKIgBgab4FDDf9NuC+VQ4qzp+nOZu/ujR59QCIAFmpOYtXiG0mATqIj8Fx053AnInXR99XXgDdCyZWQWRQGQSGjO3OGfkws2/0Z14lfhi5/spqTOmq7rs7shx4/68hYZwB9igijI+8qKLNgssHv76vsWk8MFZ03Xu/rs9V64f6fco9yYHwDBYXsTO9ENNv9wJN5CyDGG37g315g5N0Xpq7dPr+9D321YtSrlvS1BGPMO21/is3rB5g9eFN8ccuLI5Bnycji8er27er9+GE4W7vqyeqcfcvee4LB9rvseFoNNOYiOjKEzpXG30HA0kt/YZl5kHWIAIIiWUwH+08dw61/MPX6XjccA2C21eouc+P4zrOzWaT6AMrPk5be6/2mlK5twbHEvTo6advlh/EquU+F4yy0/Q3mwCYeTO5377+Dz6Bnm6QeNTwCEBFYdXejDrS+yYBOKv+yGxtJbIq05vbOPiJ8CBIdtkYWbCw8UCYIcthfIVQ1je7q3hKtLBYftbeGB3WCzqxhs6n/aDeHeVdM0TFPr9azj05NmFpddKgAdNpkgOsC9p7sLQ1jO0JFDqI6Yh4c7O4f7S6IG2OEdtm+LLLzCm1qwceSwBW+ls1RqAHTYpILoUIwZbOx2hCrl0sHiepAgrgQW3gLAlxJJT7wmB5QbTPvnluyZ4wUbRw4Ft2DpQIfNSdTkTx0n2DhyuMYXuJYOQRClGUNQlV8GljtJXbulQXDYFgXRoSiv8ksZOnIojIulY4+fM/78CaAebJgc4k0l+bh83eewyTvxl7TKL4OTHfa4+Lx8rEsdNn/XSKv8MjhNLu5iWSog0XEKiv0AhsrBRpBDwj3pqQCCyG6KDNIDeZV/EcxZW9hNtlyc8YEvsIfUgk2dl0O6Q2gpAdcnG36HzdeJckvRz5B31givtUoHLCj6HTb/w6sEG6GUSLxXNDmaQQ6brxNlVf4Fhs5khpmtLZeXh8Mgh80PlWBjtwFn1qivf0gOONQdLogrQZai7zN2G0LKmQvgDkX754WCIv/40cGGd9Yoj2ilBDhsvUWHzYfoKj/vrBFvu0+DsxCHTezEqGAjOGu5kUPviSQOmx8RwUZw1igPoaVEmMPm68SIKj+Twwu+jJ4L7IQ5bD6KUkvRY8g7a/SbthNjP6qgyAGWp5Y8nLKNJiCHtCeYUqHFb9kPEUSnE53C2+6vunSU8s5aJlt+kwKNIqdcHVVPs8q7X74HRFy+lEh7K1lKwEqZXWkWQXDrx3+DkwveWcuRHKoUFEWSQf9DcNYy3woUBxEOmzIEZy1HcuirOoQKYgRDXg574b/zYyE4bOGCGM7QkUMrd3Loq/5FCGIo7O/jdse8lBId9PkdihGCGAahlJgnORQPdUsdNjXk0FlDKDhsKsihs4aYxhPEADA5nPLb/3MD4b0nFkTBWaO9GyE10GFLJ4hMDmFOV/P158ZVHDYFhva38U+05EoOS6UKr2HJBdH+Npp1uZLDEl6KxSzNyPwpCLl01hCwS6vjO8MWD7l01hBqDls4mLO2eNdGPqDmsEUwzKWzhlB02MIZ8nKYG2cNoeiwhTNkN9sxsaC8sYsEeClWpMMWBn6jSW6cNUSFr3EmzJ9YKTF3zhqCja1y1f45oSAyZ43JYY6cNYRwS2Qyho6zlsdSIkPYGTY15NVZQ4ScYVNlyDtrhH/BmArqDlsgw5w6a4gYDlsQQ0cs8GK55bKRIY7DFsDQ/iZexZg7OfQctuSCyMthzkqJDDC8nFtOEglibp01BO5FcwQxAcH8OmuI05QFRaGUmCtnDZHWYcvrRhMPaR024cyaka9SIoOwZE4giPz1V3nZpC9CqAImEUT7exX+IpG8oRV+qDsSOXbWEMItkfEZ5thZQwiOSmyCeXbWEOkcNtFZy1spkUF02OpxkcMza340eYdNvBJSBc63LnO40cTDIX8HSDL08U8N0j0VJVpwWUeKFRcUaXIqFm4BwhokjRNrcI90LjMLG7D2LlvmxUYCnA5wE2fOLHwPfffWHKuWBPjtWt7sXw9rgZfKxEIvj6kT4KIW/fyRyPKax9RobaenqOWxROOhf5zyj5NavXwuujmstb2/LhubXlu7yOeKVEBrfNQ2tAQw29vTPBagZAi9mjzk0vJlP3eBAgUKFChQoECBAgUKFChQoECBj8P/AC00t4hLp+g2AAAAAElFTkSuQmCC", + "tokenId": 0, + "decimals": 6, + "address": "KT1SybeY3QZ3kX4PS5ZXhxyv2dZWghTFuCdu", + "exchanges": [ { - "symbol": "UCC", - "address": "KT1Br7E3KD65oHq9wc16Xr5jfzBWXexFhLdQ", + "name": "quipuswap", + "tezPool": "149.987009", + "tokenPool": "3.603669000000000000000000000000000000", + "address": "KT1TZFWpS7zvLCsGEqS3xjvC4SkfngeyszyY", + "sharesTotal": "1291294742", + "midPrice": "41.620640", + "token": { + "address": "KT1SybeY3QZ3kX4PS5ZXhxyv2dZWghTFuCdu", + "decimals": 6, + "symbol": "PLAT", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1MyWKNyL9bFT69r5RaJga5TurNCh3bzz4D", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1Br7E3KD65oHq9wc16Xr5jfzBWXexFhLdQ", - "decimals": 0, - "symbol": "UCC", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "Zeus", - "address": "KT1Mn1N9jVFWHPWgtZHBoMEGqsupreBYEXvb", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1TFto9kmyAfaZKB8dJV9MAep9WDfJPRKen", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1Mn1N9jVFWHPWgtZHBoMEGqsupreBYEXvb", - "decimals": 6, - "symbol": "Zeus", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, + "standard": "fa2", + "thumbnailUri": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOEAAADhCAMAAAAJbSJIAAAA81BMVEX///93pL0zMzP4smqrws7v7+8lJSUpKSmjo6MWFhb8tWvq6uofHx+CgoJrnbggKTC+jFnExMQaGhouLi73+vsoKCh6qcMiIiL/uW0SEhJBQUHNzc0tKCT09PQ1NTUtMDIkKzC6urri4uKsrKyWlpbY2NhiYmIVJC5ZWVmenp51dXWGhoZubm7JyclRUVFISEiAY0a+0t7k7PFqVUCugVPtq2eTb0w5PkGRs8XR3+dHPzhZSjxCPDbfomPSmV62hlZ5XkSgeE9pjaJbd4dUbHljhJbZ5eyevc+zy9lgTj0AAAAAFypuV0FIWWJEUVlPZHArIhtEoPWJAAAOzUlEQVR4nO1da1fjOBINoZNgYxJiJyQB8oAAAcKrh0d3A+HRPTNMz9Iz+/9/zcZWlS05si3bZeI9x/fDHPpMInwtqa6qriRKpQIFChQoUKBAgQIFChQoUKBAgQIFFtDqVyrr65V+a9kPkgH65+Pp0bZV65iaabStwcXGSXN/2Q9FhvW96WXPqLYtq+zCqlUNzTodHy774dKjMj42jRrHjce8SwcH/99d2TzSOgHssDOrvcuT/rKfMyH6azUjnB6S1E4z7Mj1o/WMWj5odxTowXDVzrLieNDrHGXS8NioyqgMHcg4/r1RyeAxmoP5a9bO6Rs+vDT81EaNRqN8/3D98v7zfjD/uTHyEW0bY+rH2D/W7GlibVM3XJr2LJHd5PHq5mm22u12dV23/zt7er57aDREksYl8VCdwnvunNC2u79dFeg1Hm5muo1VDva/bzdfRgJJyyTuxho0rJHOgLHGdeBwcv866wrceJrd1c3ryYjjaJ5RPkppz4RZTtnshsbz+7mpB9FDkrOrBsexuk0a24/hbfd2yJo84iRicv0U2H08x9u7iTdWrQ7lSm6/B61SBZv+dtt91MbjpgI/RnL2PvEoak2ip7ExhQcy1kiaqwzcKTicvEaMTwHdp0dvqPb2SJ7GQQtfuUkRbPpe9jC6n8XgZ3ej/jLJhOIYg81p+rZa2y7BydVqPIJ2Nz57ykEYGEoX8FRa+vl9UXMJPnfj8rO7cTZwKZp02n+IweYybUunbhRtbCYhOKd4e4+T0SrTZVSnGGxSLifGqIPD0VPsEYoUV38ixdoxDb05+rjEaqd6azgW5gxjxhiRo0vROKBiOM9zgOFGmlZcnZgk7kGGe5yLGl20wRDYSxFsNnAkTDbTEdRvH4GiZZEx3MFgc5G4iUOchJObZEGGp9iAtqpTMoqnEObNxEKLw2D0kpbgnOImSn+aQSWigj3QTliMxqk8fEzNb47uFUQbiy6erhmpxoW79mukCaMedIw2Jt0a3A02iZYSBxBmRq/px6jDcAbjlLDA4gabJOOihVWnAUkPrnLjlLATz1IEm7UOjVDwwJmYei3pYh2DTQIRArEf/qQjqN+AZJh0Cf8JdEQ19mKpadIsZkSKA9YoRVaHwGVX7LzlDLrwnibMAMNXGKcaXY5xriULNi0IUg3CWWgDBMMgTPePMBeOF7/2YHg/0hLU71gnWoS2yjrMJ2sQ62vwYkavxAxREw3CcjUKdydOsOljnKFZznjowsKGcpi6Vf5ejLLzuZFBnLGBsaaWKm31IUmV/6CdySCdA4dpmZChW+WPYSlCrY5UDBn0x/gjKhJulV852OA0HFLzmzN8yWAilqYYbFSr/IcmrNiop6G3cmvTlaTmaGE9SbXKD2qYwTR09YJSEUtcsFFcD55UM1nQMABDuvzCgVvlV6vlQYmnQR9o5ooI46lGu9FvH9JZxTcH0Xfi+PLqUGN4zUKNRhVM95s2dlAxOgfnzWhsQyjdjIdbFYb6FWNIliPu/W3YcB2ytqEA/HAjFv6j1Ie4+Dapit8Q+D8CagUdXLcZVFua+lrEc5FBsd6h3wBDqnJUS2UfIQ3DKzWGz0zy6RY1Fx9FUXF9QN6HWHDJHo3nePOQjCEkQmWrWnW51qqUQIZq6wPyWFoaszWmdbq2dgkUaxtrhBiDejaU5HCuh8CQrGbaZOpWPUlZ5Q8G9KFiqqW/w5qGbF/GPhNEZ9Gd3lKUAA2OR7VUqwtV4SpZybTPOs6xgiu4WrEIl73wCofXagx1yC0Id/iC5DsJvlvlp7OaSzuM4ehObeWdQX4I8cVwRgVW+elmQcx0GQW/TfiOYfIxTkmr/CE4iJUuY2rRIQwFIIiw0j2CYKOR/YZ46TJ63YSDCEdRh+3/WndzDar2MV1Wk8NbqJfWqH59ya1fY3HrILGlGACI/sNYq1JKB7G0z6aeW/Iu4/4FmjJCizU/fFBi2H0Y8iOKBv2OKEBNDDY08Rpe4PBdiSEOUpN07z5sOunhv2Nbiq1+yAlYmARqcoiJRYqtaDJAKOhhOXgdl6cKwWZOrsIQtMiClf3oRqkPYdKSDtJSaYOFc28x71qK4QeHWkgOIP8UiJGSHKLce2+bBlDB5lJOFIzg2eAjF0IRMmylrWEohsQlfRTEqufLRFmKUn6VinQywiwfKcihvon7aYiPDkJBscatBI9Dq/xyfgGdiBazShfCNtqYewqiATuj+KGxj4ohy2ECelDOEBKy4UN07qS/QhfSH7qEDJH3LNBSlBwcagUSlA1TtBpfovvwFre1UXehu67id9K2cHAtbvsI7kKZYjSV5bD7PsyqC1HihSOXwZZiMEHZMB1D7hRZStRv6LeXupiCIAphBSvFC4eR4jGcKuZO+gy3shOeR3CxBoIopISBB4fCGC5ORJDDySyqC/E4AmlWgeAKivMZCMCljh1sWjwq68Ho8x902gY5bEQRdE/NmFlcJoGC6OxD+lYHrOzC76zWBXz9FIw3/oMORZjOETv8ui9IkK62wKPCHoPVZn6rrzBs/QCK1q+tFQ5hDD/xH7RbA62N2JfSvXLPk2QxRj2HzdkL3a+7j/gFfu3ud/7Bt8IYcu/iq90aymGos6a7BLOIow6woOiMK4/hdxynX4RODGP41fvYm93YHshhWClRv0aCZSOrC0kg4LGt0Fxv/QOdu/uDp/imxLD+2W7sJFIO9dUH97Qz5TFZEZDDMUHkuqGOnWipTkSO4Te7sY0oOew+eYdkKY86+wALD1aF5aLF1u+yYBPG0PtY/Te7sWPMDgM6UH/1znJrNIfnpYBaCisgfq5zFAeyYBPCkOt/Z1KjHMq7sDv76U7Bco90r54PvMM2F0SO4R/YiXywUQo0dbstPIwrddb0Vf7eiF6GPeg5bKIgBgab4FDDf9NuC+VQ4qzp+nOZu/ujR59QCIAFmpOYtXiG0mATqIj8Fx053AnInXR99XXgDdCyZWQWRQGQSGjO3OGfkws2/0Z14lfhi5/spqTOmq7rs7shx4/68hYZwB9igijI+8qKLNgssHv76vsWk8MFZ03Xu/rs9V64f6fco9yYHwDBYXsTO9ENNv9wJN5CyDGG37g315g5N0Xpq7dPr+9D321YtSrlvS1BGPMO21/is3rB5g9eFN8ccuLI5Bnycji8er27er9+GE4W7vqyeqcfcvee4LB9rvseFoNNOYiOjKEzpXG30HA0kt/YZl5kHWIAIIiWUwH+08dw61/MPX6XjccA2C21eouc+P4zrOzWaT6AMrPk5be6/2mlK5twbHEvTo6advlh/EquU+F4yy0/Q3mwCYeTO5377+Dz6Bnm6QeNTwCEBFYdXejDrS+yYBOKv+yGxtJbIq05vbOPiJ8CBIdtkYWbCw8UCYIcthfIVQ1je7q3hKtLBYftbeGB3WCzqxhs6n/aDeHeVdM0TFPr9azj05NmFpddKgAdNpkgOsC9p7sLQ1jO0JFDqI6Yh4c7O4f7S6IG2OEdtm+LLLzCm1qwceSwBW+ls1RqAHTYpILoUIwZbOx2hCrl0sHiepAgrgQW3gLAlxJJT7wmB5QbTPvnluyZ4wUbRw4Ft2DpQIfNSdTkTx0n2DhyuMYXuJYOQRClGUNQlV8GljtJXbulQXDYFgXRoSiv8ksZOnIojIulY4+fM/78CaAebJgc4k0l+bh83eewyTvxl7TKL4OTHfa4+Lx8rEsdNn/XSKv8MjhNLu5iWSog0XEKiv0AhsrBRpBDwj3pqQCCyG6KDNIDeZV/EcxZW9hNtlyc8YEvsIfUgk2dl0O6Q2gpAdcnG36HzdeJckvRz5B31givtUoHLCj6HTb/w6sEG6GUSLxXNDmaQQ6brxNlVf4Fhs5khpmtLZeXh8Mgh80PlWBjtwFn1qivf0gOONQdLogrQZai7zN2G0LKmQvgDkX754WCIv/40cGGd9Yoj2ilBDhsvUWHzYfoKj/vrBFvu0+DsxCHTezEqGAjOGu5kUPviSQOmx8RwUZw1igPoaVEmMPm68SIKj+Twwu+jJ4L7IQ5bD6KUkvRY8g7a/SbthNjP6qgyAGWp5Y8nLKNJiCHtCeYUqHFb9kPEUSnE53C2+6vunSU8s5aJlt+kwKNIqdcHVVPs8q7X74HRFy+lEh7K1lKwEqZXWkWQXDrx3+DkwveWcuRHKoUFEWSQf9DcNYy3woUBxEOmzIEZy1HcuirOoQKYgRDXg574b/zYyE4bOGCGM7QkUMrd3Loq/5FCGIo7O/jdse8lBId9PkdihGCGAahlJgnORQPdUsdNjXk0FlDKDhsKsihs4aYxhPEADA5nPLb/3MD4b0nFkTBWaO9GyE10GFLJ4hMDmFOV/P158ZVHDYFhva38U+05EoOS6UKr2HJBdH+Npp1uZLDEl6KxSzNyPwpCLl01hCwS6vjO8MWD7l01hBqDls4mLO2eNdGPqDmsEUwzKWzhlB02MIZ8nKYG2cNoeiwhTNkN9sxsaC8sYsEeClWpMMWBn6jSW6cNUSFr3EmzJ9YKTF3zhqCja1y1f45oSAyZ43JYY6cNYRwS2Qyho6zlsdSIkPYGTY15NVZQ4ScYVNlyDtrhH/BmArqDlsgw5w6a4gYDlsQQ0cs8GK55bKRIY7DFsDQ/iZexZg7OfQctuSCyMthzkqJDDC8nFtOEglibp01BO5FcwQxAcH8OmuI05QFRaGUmCtnDZHWYcvrRhMPaR024cyaka9SIoOwZE4giPz1V3nZpC9CqAImEUT7exX+IpG8oRV+qDsSOXbWEMItkfEZ5thZQwiOSmyCeXbWEOkcNtFZy1spkUF02OpxkcMza340eYdNvBJSBc63LnO40cTDIX8HSDL08U8N0j0VJVpwWUeKFRcUaXIqFm4BwhokjRNrcI90LjMLG7D2LlvmxUYCnA5wE2fOLHwPfffWHKuWBPjtWt7sXw9rgZfKxEIvj6kT4KIW/fyRyPKax9RobaenqOWxROOhf5zyj5NavXwuujmstb2/LhubXlu7yOeKVEBrfNQ2tAQw29vTPBagZAi9mjzk0vJlP3eBAgUKFChQoECBAgUKFChQoECBj8P/AC00t4hLp+g2AAAAAElFTkSuQmCC" + } + } + ] + }, + { + "symbol": "XI", + "thumbnailUri": "https://i.imgur.com/B6hhOuF.png", + "tokenId": 0, + "decimals": 6, + "address": "KT1PFzYyXZhYXHKoznXL1y39dLmQ7KbaR3JM", + "exchanges": [ { - "symbol": "AMMO", + "name": "quipuswap", + "tezPool": "10.317432", + "tokenPool": "302157.374349000000000000000000000000000000", + "address": "KT1PmYoCF5FkiL6GxZfgWZSV4W7R7HU6Xnnd", + "sharesTotal": "174426080", + "midPrice": "0.000034", + "token": { + "address": "KT1PFzYyXZhYXHKoznXL1y39dLmQ7KbaR3JM", + "decimals": 6, + "symbol": "XI", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.imgur.com/B6hhOuF.png" + } + } + ] + }, + { + "symbol": "TZ10X", + "thumbnailUri": "https://cloudflare-ipfs.com/ipfs/QmYyZsJDhS9tuitvdWMFxzkFxm3vKZ344fKkWMMiZUi6NU", + "tokenId": 0, + "decimals": 6, + "address": "KT1FuZXfq3K52hodz1qmoNBEUTz7WMeP2Twh", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "10.045478", + "tokenPool": "0.998010000000000000000000000000000000", + "address": "KT1REvevPU2jnjtvoXLdAa3yJQ3wxhzNSBDS", + "sharesTotal": "10009919", + "midPrice": "10.065508", + "token": { + "address": "KT1FuZXfq3K52hodz1qmoNBEUTz7WMeP2Twh", + "decimals": 6, + "symbol": "TZ10X", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://cloudflare-ipfs.com/ipfs/QmYyZsJDhS9tuitvdWMFxzkFxm3vKZ344fKkWMMiZUi6NU" + } + } + ] + }, + { + "symbol": "rkDAO", + "thumbnailUri": "https://i.ibb.co/3m7xx5C/Rocket-9.png", + "tokenId": 0, + "decimals": 8, + "address": "KT1MuyJ7gVw74FNJpfb2mHR15aCREdyEbe2e", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "8.300657", + "tokenPool": "58.394132140000000000000000000000000000", + "address": "KT1ANY7962FTf2RqJMMF4paZkuTQA77994yv", + "sharesTotal": "35826890", + "midPrice": "0.142149", + "token": { + "address": "KT1MuyJ7gVw74FNJpfb2mHR15aCREdyEbe2e", + "decimals": 8, + "symbol": "rkDAO", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.ibb.co/3m7xx5C/Rocket-9.png" + } + } + ] + }, + { + "symbol": "rkDAO", + "thumbnailUri": "https://i.ibb.co/3m7xx5C/Rocket-9.png", + "tokenId": 0, + "decimals": 8, + "address": "KT1FzK2HcGKQ7W6x94gKy8KZWw5Bdww7AvUo", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1QhWpeyUBAG1SvSonnoSDQ3vuidMAkpPt7", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1FzK2HcGKQ7W6x94gKy8KZWw5Bdww7AvUo", + "decimals": 8, + "symbol": "rkDAO", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.ibb.co/3m7xx5C/Rocket-9.png" + } + } + ] + }, + { + "symbol": "S-RCKT", + "thumbnailUri": "https://i.ibb.co/tqjwRdP/Untitled-design-2021-08-15-T161102-101.png", + "tokenId": 0, + "decimals": 6, + "address": "KT1X8ggJYL7YopeProUe5o3bL1MfDz2hrJTu", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1QzgHgH8EoqFkjYQLZhPgpKDHHWd6xupnP", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1X8ggJYL7YopeProUe5o3bL1MfDz2hrJTu", + "decimals": 6, + "symbol": "S-RCKT", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.ibb.co/tqjwRdP/Untitled-design-2021-08-15-T161102-101.png" + } + } + ] + }, + { + "symbol": "RCKT", + "thumbnailUri": "https://i.ibb.co/tqjwRdP/Untitled-design-2021-08-15-T161102-101.png", + "tokenId": 0, + "decimals": 6, + "address": "KT1VUM4kxC6bassaPHH9Rypgw4a7Da6UTexe", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1DAT3trXKv4teASKx21KrjvUiUgX2x17Gw", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1VUM4kxC6bassaPHH9Rypgw4a7Da6UTexe", + "decimals": 6, + "symbol": "RCKT", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.ibb.co/tqjwRdP/Untitled-design-2021-08-15-T161102-101.png" + } + } + ] + }, + { + "symbol": "RCKT", + "thumbnailUri": "https://gblobscdn.gitbook.com/assets%2F-MayY_wA8g4oLd9eVN9A%2F-MbbCn2yMCnBWfDTMUTb%2F-MbbDTyyuxM6uBAYA6ms%2FToken.png", + "tokenId": 0, + "decimals": 6, + "address": "KT19JYndHaesXpvUfiwgg8BtE41HKkjjGMRC", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "80.408382", + "tokenPool": "4701860.046400000000000000000000000000000000", + "address": "KT1B7NqoQQkALYPS9fdxrcjGMQST6Wv4yy3h", + "sharesTotal": "1551456981", + "midPrice": "0.000017", + "token": { + "address": "KT19JYndHaesXpvUfiwgg8BtE41HKkjjGMRC", + "decimals": 6, + "symbol": "RCKT", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://gblobscdn.gitbook.com/assets%2F-MayY_wA8g4oLd9eVN9A%2F-MbbCn2yMCnBWfDTMUTb%2F-MbbDTyyuxM6uBAYA6ms%2FToken.png" + } + } + ] + }, + { + "symbol": "tzSHILL", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmRyRb3X3TRpvC1LkmtySPJXwsi64mDkv6Xg8mPm4sRstV", + "tokenId": 0, + "decimals": 8, + "address": "KT1QpaXUnc4du6zVTCDUFHsE9gF3DqR1o4RX", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1HT2cQb2ZCnzpGe1W37tFimbscs6BmWMkQ", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1QpaXUnc4du6zVTCDUFHsE9gF3DqR1o4RX", + "decimals": 8, + "symbol": "tzSHILL", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmRyRb3X3TRpvC1LkmtySPJXwsi64mDkv6Xg8mPm4sRstV" + } + } + ] + }, + { + "symbol": "WCK", + "thumbnailUri": "https://i.ibb.co/S5J4xkX/Untitled-design-2021-08-16-T180433-329.png", + "tokenId": 0, + "decimals": 6, + "address": "KT1XasNSXe1F2gYP7MbEU2cqmEfdJtpuJ4hJ", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1N6peYqLQjASQ48ec79zRHLs6hPgKPzdDj", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1XasNSXe1F2gYP7MbEU2cqmEfdJtpuJ4hJ", + "decimals": 6, + "symbol": "WCK", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.ibb.co/S5J4xkX/Untitled-design-2021-08-16-T180433-329.png" + } + } + ] + }, + { + "symbol": "GUNS", + "thumbnailUri": "https://i.ibb.co/N1zMCm1/Untitled-design-2021-08-16-T184825-036.png", + "tokenId": 0, + "decimals": 6, + "address": "KT1C1vEApCk6xQ28z884i7jeJkSfKsLFMbUi", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1BVpcBoYaM7VBBpXwx1UAEMPKz7fnHzMpx", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1C1vEApCk6xQ28z884i7jeJkSfKsLFMbUi", + "decimals": 6, + "symbol": "GUNS", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.ibb.co/N1zMCm1/Untitled-design-2021-08-16-T184825-036.png" + } + } + ] + }, + { + "symbol": "AMMO", + "thumbnailUri": "https://i.ibb.co/zHwRM8P/Untitled-design-2021-08-16-T185447-507.png", + "tokenId": 0, + "decimals": 6, + "address": "KT1Lyfp1fQsNp6FRbBf14EpNiVkic6TVidBB", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1KXpyBEYEtc9fK5MHuaFBDkQKfZpx4FxgZ", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { "address": "KT1Lyfp1fQsNp6FRbBf14EpNiVkic6TVidBB", + "decimals": 6, + "symbol": "AMMO", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1KXpyBEYEtc9fK5MHuaFBDkQKfZpx4FxgZ", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1Lyfp1fQsNp6FRbBf14EpNiVkic6TVidBB", - "decimals": 6, - "symbol": "AMMO", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "BRG", - "address": "KT1NvWaKSdPPo3TEGbCRpAWYcPkFNwHvirjJ", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1P6epcVMWamLGSfnaN6Hme5EP27HQBWqtB", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1NvWaKSdPPo3TEGbCRpAWYcPkFNwHvirjJ", - "decimals": 5, - "symbol": "BRG", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, + "standard": "fa2", + "thumbnailUri": "https://i.ibb.co/zHwRM8P/Untitled-design-2021-08-16-T185447-507.png" + } + } + ] + }, + { + "symbol": "TIGER", + "thumbnailUri": "https://i.imgur.com/owkCFf2.png", + "tokenId": 0, + "decimals": 0, + "address": "KT1DkQjYFtc9JobC1JAJAxzpwaNm2RGkEkgR", + "exchanges": [ { - "symbol": "BTCtz", - "address": "KT1Mg7Jaxz9n6YM9XjbDLhAjbuWa9bzhAAy9", + "name": "quipuswap", + "tezPool": "0.038279", + "tokenPool": "12927461.000000000000000000000000000000000000", + "address": "KT1KQ71iXPDKuY2E9AGqQq1LqxepHRc6eqqU", + "sharesTotal": "21842978", + "midPrice": "0.000000", + "token": { + "address": "KT1DkQjYFtc9JobC1JAJAxzpwaNm2RGkEkgR", + "decimals": 0, + "symbol": "TIGER", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1Pm6NQYTKpLjAJsrSRVCB5DZp5bZtNRQLK", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1Mg7Jaxz9n6YM9XjbDLhAjbuWa9bzhAAy9", - "decimals": 8, - "symbol": "BTCtz", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "xPLENTY", - "address": "KT1Rpviewjg82JgjGfAKFneSupjAR1kUhbza", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1B4UQTW1P8kgasbbmEPUeaEQF68mPxMpc8", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1Rpviewjg82JgjGfAKFneSupjAR1kUhbza", - "decimals": 18, - "symbol": "xPLENTY", - "tokenId": 0, - "standard": "fa12" - } - } - ] - }, + "standard": "fa2", + "thumbnailUri": "https://i.imgur.com/owkCFf2.png" + } + } + ] + }, + { + "symbol": "UNO", + "thumbnailUri": "ipfs://QmXdQ3DaMsnqH7MEhX77foWfjxRnj8Qe88mwekkn4PSt3q", + "tokenId": 0, + "decimals": 9, + "address": "KT1ErKVqEhG9jxXgUG2KGLW3bNM7zXHX8SDF", + "exchanges": [ { - "symbol": "OBJKT", - "address": "KT1RJ6PbjHpwc3M5rw5s2Nbmefwbuwbdxton", - "tokenId": 19059, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1Np7wGxpgmBjCuh9PFG27LzLiEx1f8sUtq", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1RJ6PbjHpwc3M5rw5s2Nbmefwbuwbdxton", - "decimals": 0, - "symbol": "OBJKT", - "tokenId": 19059, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "KYLE", - "address": "KT1C7kg33b39TYR7t1ZJi5SCdNB6RVn8pY54", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1H9eao2GX11P9tJUSudV2md6tJ88Vy5Vdo", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1C7kg33b39TYR7t1ZJi5SCdNB6RVn8pY54", - "decimals": 6, - "symbol": "KYLE", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, + "name": "quipuswap", + "tezPool": "345.138885", + "tokenPool": "2594.657934368000000000000000000000000000", + "address": "KT1Cq3pyv6QEXugsAC2iyXr7ecFqN7fJVTnA", + "sharesTotal": "6227825156", + "midPrice": "0.133019", + "token": { + "address": "KT1ErKVqEhG9jxXgUG2KGLW3bNM7zXHX8SDF", + "decimals": 9, + "symbol": "UNO", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "ipfs://QmXdQ3DaMsnqH7MEhX77foWfjxRnj8Qe88mwekkn4PSt3q" + } + } + ] + }, + { + "symbol": "UNODAO", + "thumbnailUri": "https://pbs.twimg.com/profile_images/1385164883432443907/JBt2SAzX_400x400.jpg", + "tokenId": 0, + "decimals": 8, + "address": "KT1KsK1ceRYetZmNTbtTfPjoTYyr3zHc3omC", + "exchanges": [ { - "symbol": "HNDC", - "address": "KT1Hbb8wfqzBNeEivTxjrt2cTnvimzTgyjDd", + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1Ha8riSzjcCZSCNEQWpFGWnB1DbmwkgfT3", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1KsK1ceRYetZmNTbtTfPjoTYyr3zHc3omC", + "decimals": 8, + "symbol": "UNODAO", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1NcVjsTWq7vfyBdfPYYzFPCqL9LqPEAiiL", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1Hbb8wfqzBNeEivTxjrt2cTnvimzTgyjDd", - "decimals": 4, - "symbol": "HNDC", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "PNTA", - "address": "KT1Di5SiUQ9Muqr8uwruzv3roigzuEss2G9o", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1SQX4QU5QGMc6ZdJmgj82Z5XfmmnaLBvjb", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1Di5SiUQ9Muqr8uwruzv3roigzuEss2G9o", - "decimals": 6, - "symbol": "PNTA", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "CAP", - "address": "KT18qpkmVoxf88t2shbeQnbXTa7jSLzbowSw", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1MPV9LMchKT2ooYWw5vJBode73ro5XeCiP", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT18qpkmVoxf88t2shbeQnbXTa7jSLzbowSw", - "decimals": 8, - "symbol": "CAP", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "ICE", - "address": "KT1QVU1DYYx5tSf1QvptdhVHvKo2YSmR3qfp", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1XbbzHsLaKJaU3srEyPXt2JhvGMRviG8g6", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1QVU1DYYx5tSf1QvptdhVHvKo2YSmR3qfp", - "decimals": 3, - "symbol": "ICE", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, + "standard": "fa2", + "thumbnailUri": "https://pbs.twimg.com/profile_images/1385164883432443907/JBt2SAzX_400x400.jpg" + } + } + ] + }, + { + "symbol": "OBJKT", + "thumbnailUri": "ipfs://QmNrhZHUaEqxhyLfqoq1mtHSipkWHeT31LNHb1QEbDHgnc", + "tokenId": 215065, + "decimals": 0, + "address": "KT1RJ6PbjHpwc3M5rw5s2Nbmefwbuwbdxton", + "exchanges": [ { - "symbol": "OBJKT", + "name": "quipuswap", + "tezPool": "1.213607", + "tokenPool": "191.000000000000000000000000000000000000", + "address": "KT1D8zpJL6f24KmGFMwVgdohtwKAK6nir4tc", + "sharesTotal": "14647935", + "midPrice": "0.006354", + "token": { "address": "KT1RJ6PbjHpwc3M5rw5s2Nbmefwbuwbdxton", - "tokenId": 19062, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1SamzaXd2qMYa5aezqUye1VWBHr6dMjwGX", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1RJ6PbjHpwc3M5rw5s2Nbmefwbuwbdxton", - "decimals": 0, - "symbol": "OBJKT", - "tokenId": 19062, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "MOZ", - "address": "KT1JJUWAb6WHoKpzT2Ga5Y4rgMAkeptKHqQ8", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1A91CcMx1izXcbBwyH3z8Do3vnEdKpbde2", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1JJUWAb6WHoKpzT2Ga5Y4rgMAkeptKHqQ8", - "decimals": 18, - "symbol": "MOZ", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "HSK", - "address": "KT1ACFCHun5GvukxDQq3KpMPXLr9QgnqvFvd", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT19HJTgEqnmi1cYyq8z2WFtyNTECodfixmj", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1ACFCHun5GvukxDQq3KpMPXLr9QgnqvFvd", - "decimals": 2, - "symbol": "HSK", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "MOVE", - "address": "KT1Mdx7g7NxwXXhyPib8SCa1J58JRZVcammG", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1QST2yGJDVHAP9fkvqDQKcjKdhvUXfzpmZ", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1Mdx7g7NxwXXhyPib8SCa1J58JRZVcammG", - "decimals": 9, - "symbol": "MOVE", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "BTC6", - "address": "KT1DM7HeBxPWFg1JcotGtyasTSByB5X1JYQN", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1QoPpq3kXp3xkx8VwzKtWe7drfsyCijZM4", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1DM7HeBxPWFg1JcotGtyasTSByB5X1JYQN", - "decimals": 6, - "symbol": "BTC6", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "BISA", - "address": "KT1BRXzrMA8qHp9RkZmftV1YLCTdNrEXXBvu", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1MrzcYWmMbPf3ftyKKH5RaMUVhQSXpZXjP", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1BRXzrMA8qHp9RkZmftV1YLCTdNrEXXBvu", - "decimals": 3, - "symbol": "BISA", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "Heavy", - "address": "KT18zKdz3PHxDmN9C58VAWhZxQYJRMcFy1qH", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1GWkEazKxvft7LieatG7NSd7jiB3TSX9Mf", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT18zKdz3PHxDmN9C58VAWhZxQYJRMcFy1qH", - "decimals": 9, - "symbol": "Heavy", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "MYH", - "address": "KT1LmNXekg1sJTGiLdf8p5i4FyZoqk1XFB8b", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1TDemRmFqRviTnD2poa2N6AdtAuVScsK98", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1LmNXekg1sJTGiLdf8p5i4FyZoqk1XFB8b", - "decimals": 8, - "symbol": "MYH", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "VER", - "address": "KT1CUE6FVUBEaWYz6bAEubofSTvLHYkPtuDP", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1AySctZfGPtjLE7y6kiRPagPc41HNZRN6B", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1CUE6FVUBEaWYz6bAEubofSTvLHYkPtuDP", - "decimals": 6, - "symbol": "VER", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "BELLS", - "address": "KT1CyQ88Bwd9swBVDZF3Vw5H4VNCFb6d1nXg", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1BCnxpRPwBFU9B66oMj3JABnsUwna3LyBa", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1CyQ88Bwd9swBVDZF3Vw5H4VNCFb6d1nXg", - "decimals": 9, - "symbol": "BELLS", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "WTR", - "address": "KT1D7csF3qiJ8qpAEoWXykXfi66S8sbtXTMS", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1RAuRmFmCPTPwKkVR84w5RqQrHxb6eZJfr", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1D7csF3qiJ8qpAEoWXykXfi66S8sbtXTMS", - "decimals": 9, - "symbol": "WTR", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, + "decimals": 0, + "symbol": "OBJKT", + "tokenId": 215065, + "standard": "fa2", + "thumbnailUri": "ipfs://QmNrhZHUaEqxhyLfqoq1mtHSipkWHeT31LNHb1QEbDHgnc" + } + } + ] + }, + { + "symbol": "FMFN", + "thumbnailUri": "https://imgur.com/0smp0dB", + "tokenId": 0, + "decimals": 6, + "address": "KT1RJnyqwrnzKmX9oww6A5PEum8zVvRodGBi", + "exchanges": [ { - "symbol": "CHIPS", - "address": "KT1T62PhHmEoWeWWh6eHnQPxZ8bs4tCFXoc1", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1B9yqK8ji57UWdppBDUkV6R9ZHrBmeMxiU", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1T62PhHmEoWeWWh6eHnQPxZ8bs4tCFXoc1", - "decimals": 9, - "symbol": "CHIPS", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "LMR", - "address": "KT1Gd3fR4dHQPsUUnDVCK1EquCPXEQVHcSQY", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1Lv9t1pzmvTTfat4darBLKRdc5ESHBvyJ1", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1Gd3fR4dHQPsUUnDVCK1EquCPXEQVHcSQY", - "decimals": 5, - "symbol": "LMR", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "TGR", - "address": "KT1SywHHNpdeowZNRDki871hpDfiU3DZPQkw", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1AFmt4H8UcZvSyc1xEDYoVdu9NqRnWgema", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1SywHHNpdeowZNRDki871hpDfiU3DZPQkw", - "decimals": 5, - "symbol": "TGR", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, + "name": "quipuswap", + "tezPool": "3.045654", + "tokenPool": "16645800.911119000000000000000000000000000000", + "address": "KT1CfnLgRSwJLAA8WzFhUtRnbgi46MsnZwzB", + "sharesTotal": "691000883", + "midPrice": "0.000000", + "token": { + "address": "KT1RJnyqwrnzKmX9oww6A5PEum8zVvRodGBi", + "decimals": 6, + "symbol": "FMFN", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://imgur.com/0smp0dB" + } + } + ] + }, + { + "symbol": "akaDAO", + "thumbnailUri": "ipfs://QmSpZ1rPgHMPpxUsBCFUM7oERHmDVXUz219no27jWqceH6", + "tokenId": 0, + "decimals": 6, + "address": "KT1AM3PV1cwmGRw28DVTgsjjsjHvmL6z4rGh", + "exchanges": [ { - "symbol": "rkDAO", - "address": "KT1EVgxdnx9UZGNq9PTohB9gYH9zKmwf9yv8", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1MUEGM19EidcyfPfxNjWqkyPMWzh4tfm1b", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1EVgxdnx9UZGNq9PTohB9gYH9zKmwf9yv8", - "decimals": 8, - "symbol": "rkDAO", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "BNT", - "address": "KT1PccG9rVLLYKJmvc9yDW6tc1g4tcb2uQLh", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT19DwSauiVCeJGnUAz6yYRDCdK9pYAd4vmX", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1PccG9rVLLYKJmvc9yDW6tc1g4tcb2uQLh", - "decimals": 10, - "symbol": "BNT", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "ASTRO", - "address": "KT1BM6wDrSShVA7C7KGhbqRLgrHMkJQw6tUy", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1Pqm1agzKdaWh7yE4gwPwsRcr56KC5V7Zh", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1BM6wDrSShVA7C7KGhbqRLgrHMkJQw6tUy", - "decimals": 9, - "symbol": "ASTRO", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "BTC3", - "address": "KT1HwLx5RfATUQH9KUPx99aLsqsyFWPSEbqv", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1FFue2YP5SSfLzPijJmqwrF8gkAc7hnukx", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1HwLx5RfATUQH9KUPx99aLsqsyFWPSEbqv", - "decimals": 6, - "symbol": "BTC3", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "POKE", - "address": "KT1LPPBBjAcE3A9tnrVaY6bJBSTiHZ9SWbGT", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1S1SBkNY7zeA5aKN7j9WrPg7SK6B8cJkYp", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1LPPBBjAcE3A9tnrVaY6bJBSTiHZ9SWbGT", - "decimals": 6, - "symbol": "POKE", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, + "name": "quipuswap", + "tezPool": "7767.027497", + "tokenPool": "106273.951651000000000000000000000000000000", + "address": "KT1Qej1k8WxPvBLUjGVtFXStgzQtcx3itSk5", + "sharesTotal": "12336943274", + "midPrice": "0.073085", + "token": { + "address": "KT1AM3PV1cwmGRw28DVTgsjjsjHvmL6z4rGh", + "decimals": 6, + "symbol": "akaDAO", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "ipfs://QmSpZ1rPgHMPpxUsBCFUM7oERHmDVXUz219no27jWqceH6" + } + } + ] + }, + { + "symbol": "QUIPU", + "thumbnailUri": "https://quipuswap.com/tokens/quipu.png", + "tokenId": 0, + "decimals": 6, + "address": "KT193D4vozYnhGJQVtw7CoxxqphqUEEwK6Vb", + "exchanges": [ { + "name": "quipuswap", + "tezPool": "6956.715221", + "tokenPool": "51504.995948000000000000000000000000000000", + "address": "KT1X3zxdTzPB9DgVzA3ad6dgZe9JEamoaeRy", + "sharesTotal": "15247154971", + "midPrice": "0.135069", + "token": { + "address": "KT193D4vozYnhGJQVtw7CoxxqphqUEEwK6Vb", + "decimals": 6, + "symbol": "QUIPU", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://quipuswap.com/tokens/quipu.png" + } + } + ] + }, + { + "symbol": "GIF", + "thumbnailUri": "ipfs://QmQxoTVVuFS677TQJFdVh1PNRoBmVbvkwJSxe1xvf9cSqU", + "tokenId": 0, + "decimals": 9, + "address": "KT1XTxpQvo7oRCqp85LikEZgAZ22uDxhbWJv", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "1046.080073", + "tokenPool": "1220661.083820416000000000000000000000000000", + "address": "KT1LuXT6jZPhUH1qCnSUqAzFedjoBwePLQnF", + "sharesTotal": "4101289127", + "midPrice": "0.000857", + "token": { + "address": "KT1XTxpQvo7oRCqp85LikEZgAZ22uDxhbWJv", + "decimals": 9, "symbol": "GIF", - "address": "KT1RgYZfNphGmZzA8GdrDW8ZyoxfWvfPHRq3", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1DoRXdzo713W48pwd9EqFbELzqe7ba2AT5", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1RgYZfNphGmZzA8GdrDW8ZyoxfWvfPHRq3", - "decimals": 6, - "symbol": "GIF", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "STR", - "address": "KT1MVxThG9azXz2sBCcJjkRQErTEp7twd6dh", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1SfQm8qQ6pgv6Bt2pATxVu8dxqD8emnoo7", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1MVxThG9azXz2sBCcJjkRQErTEp7twd6dh", - "decimals": 9, - "symbol": "STR", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "BUFF", - "address": "KT1Ka7jn8G7xFf2bcJr5ujW9XtxSJL3b3CXH", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1HEsNQQ97gpYSA2LtKaU945HkhvA1BbBdn", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1Ka7jn8G7xFf2bcJr5ujW9XtxSJL3b3CXH", - "decimals": 6, - "symbol": "BUFF", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "ipfs://QmQxoTVVuFS677TQJFdVh1PNRoBmVbvkwJSxe1xvf9cSqU" + } + } + ] + }, + { + "symbol": "YODA", + "thumbnailUri": "https://i.imgur.com/jLaP0v6.png", + "tokenId": 0, + "decimals": 6, + "address": "KT1BdFvYD2Z1cPEMoREUtMNBcBPmrm5s4Xww", + "exchanges": [ { - "symbol": "SATIVA", - "address": "KT1TwydTCPv6EPJnVBPu8rHsPS4xTG69vdQ1", + "name": "quipuswap", + "tezPool": "1.695960", + "tokenPool": "308343.366035000000000000000000000000000000", + "address": "KT1X3vM69kdau4dAYa7ZXLdT5H6Gpyvoniui", + "sharesTotal": "1554352", + "midPrice": "0.000006", + "token": { + "address": "KT1BdFvYD2Z1cPEMoREUtMNBcBPmrm5s4Xww", + "decimals": 6, + "symbol": "YODA", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1F13QkMqZLUo9tihBYvR4uk1GDbzRwm4k3", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1TwydTCPv6EPJnVBPu8rHsPS4xTG69vdQ1", - "decimals": 0, - "symbol": "SATIVA", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, + "standard": "fa2", + "thumbnailUri": "https://i.imgur.com/jLaP0v6.png" + } + } + ] + }, + { + "symbol": "LEOS", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/Qmdk6YsGf5Ds5ZvfyhuKcj2s4nnT7hDXjKE9pKJA7xY9wY", + "tokenId": 0, + "decimals": 2, + "address": "KT1WSjYwMH22f2ZD2v7enuaJ3EUHW7XVAJBp", + "exchanges": [ { - "symbol": "RCKT", - "address": "KT1VUM4kxC6bassaPHH9Rypgw4a7Da6UTexe", + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1UEDzVv2hzTygNWuojUxfEqeVrf5fL5uPK", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1WSjYwMH22f2ZD2v7enuaJ3EUHW7XVAJBp", + "decimals": 2, + "symbol": "LEOS", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1DAT3trXKv4teASKx21KrjvUiUgX2x17Gw", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1VUM4kxC6bassaPHH9Rypgw4a7Da6UTexe", - "decimals": 6, - "symbol": "RCKT", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "ILTI", - "address": "KT1Tvh9PxYZeqDbxF8v8RCvkGuMoYFRCMXDU", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1CrrqYbBPhokSgNv299oN6AuV4SuLXtYuz", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1Tvh9PxYZeqDbxF8v8RCvkGuMoYFRCMXDU", - "decimals": 9, - "symbol": "ILTI", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "PORN", - "address": "KT1RsvaReC94WzimV2LBrx3PQAEZERMTmPE9", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1Qkma5Tu5mcsK1GXoDm2ymjvWrBgSnfpKV", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1RsvaReC94WzimV2LBrx3PQAEZERMTmPE9", - "decimals": 5, - "symbol": "PORN", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "Grape", - "address": "KT1R3PFCun1FsSzH25WXUXKL6cuoE6rGs8Eh", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1HB2NhKgjLwxLGHQFLPCj27CX7KBDgXYBA", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1R3PFCun1FsSzH25WXUXKL6cuoE6rGs8Eh", - "decimals": 6, - "symbol": "Grape", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, + "standard": "fa2", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/Qmdk6YsGf5Ds5ZvfyhuKcj2s4nnT7hDXjKE9pKJA7xY9wY" + } + } + ] + }, + { + "symbol": "ATQLA", + "thumbnailUri": "https://image.flaticon.com/icons/png/512/2128/2128093.png", + "tokenId": 0, + "decimals": 6, + "address": "KT1RdLrFcXrwbTX9vaYcbUohTTXpe1Eco2sq", + "exchanges": [ { - "symbol": "ATEZ", - "address": "KT1TT8AoDbnvmTs9VGHqVoiKnPHhaWDyGCaJ", + "name": "quipuswap", + "tezPool": "0.913001", + "tokenPool": "3.473779000000000000000000000000000000", + "address": "KT1L6Kenhh2dexw8V3NKWvRLBtKNfVGp3tMB", + "sharesTotal": "49556771", + "midPrice": "0.262826", + "token": { + "address": "KT1RdLrFcXrwbTX9vaYcbUohTTXpe1Eco2sq", + "decimals": 6, + "symbol": "ATQLA", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1Py9yhH8X2y6V2W8X7KfWmagZ8aYBA3Nf1", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1TT8AoDbnvmTs9VGHqVoiKnPHhaWDyGCaJ", - "decimals": 8, - "symbol": "ATEZ", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "JDAO", - "address": "KT1WGvBtUKvqF3Am64CXahfBPKnmaYKikwRZ", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT19NrFKnfEq4s3pgTg9sDrtgtJy95Eqaqgz", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1WGvBtUKvqF3Am64CXahfBPKnmaYKikwRZ", - "decimals": 6, - "symbol": "JDAO", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "DRG", - "address": "KT1GKQNxR4iRvER54c7Be2TcYPP18fWQqB88", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1RXHW4pm7DpiacvhoMjwvhs4U5atda9PVM", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1GKQNxR4iRvER54c7Be2TcYPP18fWQqB88", - "decimals": 6, - "symbol": "DRG", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "SAVEUP", - "address": "KT1R8Dtyh43as4Qyn5CML5NGQLy92Ur1JrUr", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1DYLV56LjgGMTMAX2Y1NFFyGXtR4J43zPo", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1R8Dtyh43as4Qyn5CML5NGQLy92Ur1JrUr", - "decimals": 6, - "symbol": "SAVEUP", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "DELTA", - "address": "KT1TULiu4n59vJRrJ44wKo8dk8BhvZdrZCLZ", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1RFcVz8KKkRgY54TmWCGUb9sP5bfAD76yC", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1TULiu4n59vJRrJ44wKo8dk8BhvZdrZCLZ", - "decimals": 6, - "symbol": "DELTA", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "T42", - "address": "KT1EpihM8tQSBwqYB6NtCT8N67pq8rKwoD93", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1M5H8qkJEzhdC3ZxZ78bSxgmcddrcusbry", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1EpihM8tQSBwqYB6NtCT8N67pq8rKwoD93", - "decimals": 0, - "symbol": "T42", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, + "standard": "fa2", + "thumbnailUri": "https://image.flaticon.com/icons/png/512/2128/2128093.png" + } + } + ] + }, + { + "symbol": "TUIT", + "thumbnailUri": "https://ibb.co/hRpxQQQ", + "tokenId": 0, + "decimals": 2, + "address": "KT1J7Gwoks1KZ8jQ28mH2L9Mz3wz9L32PX4G", + "exchanges": [ { - "symbol": "GUNS", - "address": "KT1C1vEApCk6xQ28z884i7jeJkSfKsLFMbUi", + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1RW6GSX9rJVgmw6XGSMkJJaep9XHyAzuAp", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1J7Gwoks1KZ8jQ28mH2L9Mz3wz9L32PX4G", + "decimals": 2, + "symbol": "TUIT", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://ibb.co/hRpxQQQ" + } + } + ] + }, + { + "symbol": "ENR", + "thumbnailUri": "ipfs://QmVjjDCrjBkETrWgXeL8NDg4DG2Qbi2hdQRpnWiCdS4qwg", + "tokenId": 2, + "decimals": 9, + "address": "KT1ErKVqEhG9jxXgUG2KGLW3bNM7zXHX8SDF", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "122.151569", + "tokenPool": "148251305.957764278000000000000000000000000000", + "address": "KT1GxxLmBC7tfx4Enpe5YLaCXppAKKfzNRYF", + "sharesTotal": "1217102138514", + "midPrice": "0.000001", + "token": { + "address": "KT1ErKVqEhG9jxXgUG2KGLW3bNM7zXHX8SDF", + "decimals": 9, + "symbol": "ENR", + "tokenId": 2, + "standard": "fa2", + "thumbnailUri": "ipfs://QmVjjDCrjBkETrWgXeL8NDg4DG2Qbi2hdQRpnWiCdS4qwg" + } + } + ] + }, + { + "symbol": "MCH", + "thumbnailUri": "ipfs://QmUYksqRFqUA5LUfxFs1oWLmP8Ti2SdyPAq5u72aAQLN7D", + "tokenId": 3, + "decimals": 9, + "address": "KT1ErKVqEhG9jxXgUG2KGLW3bNM7zXHX8SDF", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "67.442992", + "tokenPool": "13445300.737282283000000000000000000000000000", + "address": "KT1JAgJC6FTJ9SzGGits8GVonCr8cfFp5HGV", + "sharesTotal": "6733286758", + "midPrice": "0.000005", + "token": { + "address": "KT1ErKVqEhG9jxXgUG2KGLW3bNM7zXHX8SDF", + "decimals": 9, + "symbol": "MCH", + "tokenId": 3, + "standard": "fa2", + "thumbnailUri": "ipfs://QmUYksqRFqUA5LUfxFs1oWLmP8Ti2SdyPAq5u72aAQLN7D" + } + } + ] + }, + { + "symbol": "MIN", + "thumbnailUri": "ipfs://QmXJdLDEec56EfJVtWW2XRcYBfkmWVHbCRBDAi7YTigisB", + "tokenId": 1, + "decimals": 9, + "address": "KT1ErKVqEhG9jxXgUG2KGLW3bNM7zXHX8SDF", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "23.089336", + "tokenPool": "28453358.322278164000000000000000000000000000", + "address": "KT1H5YwfF6nmFZavwzftddbcfxAXmbGhyDCY", + "sharesTotal": "6581363400", + "midPrice": "0.000001", + "token": { + "address": "KT1ErKVqEhG9jxXgUG2KGLW3bNM7zXHX8SDF", + "decimals": 9, + "symbol": "MIN", + "tokenId": 1, + "standard": "fa2", + "thumbnailUri": "ipfs://QmXJdLDEec56EfJVtWW2XRcYBfkmWVHbCRBDAi7YTigisB" + } + } + ] + }, + { + "symbol": "NATAS", + "thumbnailUri": "https://i.ibb.co/gJS7t1c/natas.png", + "tokenId": 0, + "decimals": 0, + "address": "KT1GaEvbD4zA3pHs7mv3grpuqR1KGtjXAEDe", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "40.542289", + "tokenPool": "3620.000000000000000000000000000000000000", + "address": "KT1Xoo3KC18TjW5dSLeQwVkk9pkCL26hZfva", + "sharesTotal": "11310835", + "midPrice": "0.011200", + "token": { + "address": "KT1GaEvbD4zA3pHs7mv3grpuqR1KGtjXAEDe", + "decimals": 0, + "symbol": "NATAS", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.ibb.co/gJS7t1c/natas.png" + } + } + ] + }, + { + "symbol": "IDZ", + "thumbnailUri": "https://tezid.net/idz.png", + "tokenId": 0, + "decimals": 8, + "address": "KT1WapdVeFqhCfqwdHWwTzSTX7yXoHgiPRPU", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "4235.401460", + "tokenPool": "1254762.207215690000000000000000000000000000", + "address": "KT18rJtJNmwTfbJMinWqHzpkLeBQa4BVqGoJ", + "sharesTotal": "18946626711", + "midPrice": "0.003375", + "token": { + "address": "KT1WapdVeFqhCfqwdHWwTzSTX7yXoHgiPRPU", + "decimals": 8, + "symbol": "IDZ", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://tezid.net/idz.png" + } + } + ] + }, + { + "symbol": "INSTA", + "thumbnailUri": "ipfs://QmYMMztcxtohk1t3p4X8DDX45REzeThL1TaJroH5RT5Chj", + "tokenId": 0, + "decimals": 9, + "address": "KT19y6R8x53uDKiM46ahgguS6Tjqhdj2rSzZ", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "2595.129924", + "tokenPool": "4388900.776106910000000000000000000000000000", + "address": "KT1UzjhUhau9g5MjPxKUzM6KRJNwdW1oo52G", + "sharesTotal": "15150650500", + "midPrice": "0.000591", + "token": { + "address": "KT19y6R8x53uDKiM46ahgguS6Tjqhdj2rSzZ", + "decimals": 9, + "symbol": "INSTA", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "ipfs://QmYMMztcxtohk1t3p4X8DDX45REzeThL1TaJroH5RT5Chj" + } + } + ] + }, + { + "symbol": "HNDC", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 4, + "address": "KT1Hbb8wfqzBNeEivTxjrt2cTnvimzTgyjDd", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1NcVjsTWq7vfyBdfPYYzFPCqL9LqPEAiiL", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1Hbb8wfqzBNeEivTxjrt2cTnvimzTgyjDd", + "decimals": 4, + "symbol": "HNDC", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "DeMN", + "thumbnailUri": "https://i.ibb.co/NW9nyj8/demon.png", + "tokenId": 0, + "decimals": 8, + "address": "KT1GBgCd5dk7v4TSzWvtk1X64TxMyG4r7eRX", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "20.764807", + "tokenPool": "11753.041042040000000000000000000000000000", + "address": "KT1TcGBPvmcHawQLdFx5ADDo2hR6XMDhRVdc", + "sharesTotal": "4757277", + "midPrice": "0.001767", + "token": { + "address": "KT1GBgCd5dk7v4TSzWvtk1X64TxMyG4r7eRX", + "decimals": 8, + "symbol": "DeMN", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://i.ibb.co/NW9nyj8/demon.png" + } + } + ] + }, + { + "symbol": "ECN", + "thumbnailUri": "https://ecn.global/images/ECN-Logo.png", + "tokenId": 0, + "decimals": 8, + "address": "KT1M81KrJr6TxYLkZkVqcpSTNKGoya8XytWT", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "54.961147", + "tokenPool": "1670152.909516670000000000000000000000000000", + "address": "KT1D9PA7tvuCe9XnDskd2F67XwdrT4ueqjGe", + "sharesTotal": "841592912", + "midPrice": "0.000033", + "token": { + "address": "KT1M81KrJr6TxYLkZkVqcpSTNKGoya8XytWT", + "decimals": 8, + "symbol": "ECN", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://ecn.global/images/ECN-Logo.png" + } + } + ] + }, + { + "symbol": "RADIO", + "thumbnailUri": "https://www.radion.fm/img/token-icon.png", + "tokenId": 0, + "decimals": 6, + "address": "KT1NSLhBqkWbGnr6PeYwigwKzurRgUF36vas", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "9.205241", + "tokenPool": "138.359505000000000000000000000000000000", + "address": "KT1VEhYnyUpxtJPAdpAW8NZhhSzCAYFCf1oE", + "sharesTotal": "6726991", + "midPrice": "0.066531", + "token": { + "address": "KT1NSLhBqkWbGnr6PeYwigwKzurRgUF36vas", + "decimals": 6, + "symbol": "RADIO", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://www.radion.fm/img/token-icon.png" + } + } + ] + }, + { + "symbol": "DEW", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 5, + "address": "KT1PG1dTXsn27jjWtC58Yypddiq7JhpzG7ED", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT19Uhoj1xuMcqRiCNYxcGB2iv2yHGupxk6n", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1PG1dTXsn27jjWtC58Yypddiq7JhpzG7ED", + "decimals": 5, + "symbol": "DEW", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "EASY", + "thumbnailUri": "https://cryptoeasy.io/img/cryptoeasy-logo.png", + "tokenId": 0, + "decimals": 6, + "address": "KT1QgAtLPu3SNq9c6DPLanwL5bvfX3rgh2CS", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "23.827252", + "tokenPool": "37416.449520000000000000000000000000000000", + "address": "KT1QHbWZPsXK8rpKkudNLmx4VVvgHvGqjnwP", + "sharesTotal": "194886753", + "midPrice": "0.000637", + "token": { + "address": "KT1QgAtLPu3SNq9c6DPLanwL5bvfX3rgh2CS", + "decimals": 6, + "symbol": "EASY", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://cryptoeasy.io/img/cryptoeasy-logo.png" + } + } + ] + }, + { + "symbol": "BTCtz", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 8, + "address": "KT1Mg7Jaxz9n6YM9XjbDLhAjbuWa9bzhAAy9", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1Pm6NQYTKpLjAJsrSRVCB5DZp5bZtNRQLK", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1Mg7Jaxz9n6YM9XjbDLhAjbuWa9bzhAAy9", + "decimals": 8, + "symbol": "BTCtz", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "BGCN", + "thumbnailUri": "https://lh3.googleusercontent.com/ONe_dhTiMksXbOjPVFy2oRuaUodMwb8kgC8N348M6z6CM36mP1HdNUGsXHsEAXhPzKyO7s-qtUkWiL3ukCeYyoXGVG1aR-4auRMq=w286", + "tokenId": 0, + "decimals": 4, + "address": "KT1LoC4CV7oiLoQj29dZ91iMkdsGcqgJ4KhL", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1UGs3mVuRowjBiUVen1FM2gCmc7yzBmC2o", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1LoC4CV7oiLoQj29dZ91iMkdsGcqgJ4KhL", + "decimals": 4, + "symbol": "BGCN", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://lh3.googleusercontent.com/ONe_dhTiMksXbOjPVFy2oRuaUodMwb8kgC8N348M6z6CM36mP1HdNUGsXHsEAXhPzKyO7s-qtUkWiL3ukCeYyoXGVG1aR-4auRMq=w286" + } + } + ] + }, + { + "symbol": "WTZ", + "thumbnailUri": "ipfs://bafybeidwsid6fvv4vxbqja7er3b4exsht5r7umv6hpz7rc3ujg7xilhwv4", + "tokenId": 0, + "decimals": 6, + "address": "KT1PnUZCp3u2KzWr93pn4DD7HAJnm3rWVrgn", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "175.004658", + "tokenPool": "155.704414000000000000000000000000000000", + "address": "KT1VXBX6NwapYf9Sq6LsQVr4SdsDq3ta1nss", + "sharesTotal": "130853480", + "midPrice": "1.123954", + "token": { + "address": "KT1PnUZCp3u2KzWr93pn4DD7HAJnm3rWVrgn", + "decimals": 6, + "symbol": "WTZ", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "ipfs://bafybeidwsid6fvv4vxbqja7er3b4exsht5r7umv6hpz7rc3ujg7xilhwv4" + } + } + ] + }, + { + "symbol": "UCC", + "thumbnailUri": "https://www.google.com/url?sa=i&url=https%3A%2F%2Fcommons.wikimedia.org%2Fwiki%2FFile%3APangeaUltimaRoughEstimation.png&psig=AOvVaw2SNwsw2oVccKRIktuQrBAc&ust=1634162948188000&source=images&cd=vfe&ved=0CAgQjRxqFwoTCOChv9nyxfMCFQAAAAAdAAAAABAD", + "tokenId": 0, + "decimals": 0, + "address": "KT1Br7E3KD65oHq9wc16Xr5jfzBWXexFhLdQ", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1MyWKNyL9bFT69r5RaJga5TurNCh3bzz4D", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1Br7E3KD65oHq9wc16Xr5jfzBWXexFhLdQ", + "decimals": 0, + "symbol": "UCC", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://www.google.com/url?sa=i&url=https%3A%2F%2Fcommons.wikimedia.org%2Fwiki%2FFile%3APangeaUltimaRoughEstimation.png&psig=AOvVaw2SNwsw2oVccKRIktuQrBAc&ust=1634162948188000&source=images&cd=vfe&ved=0CAgQjRxqFwoTCOChv9nyxfMCFQAAAAAdAAAAABAD" + } + } + ] + }, + { + "symbol": "TILLA", + "thumbnailUri": "https://static.thenounproject.com/png/1368419-200.png", + "tokenId": 0, + "decimals": 6, + "address": "KT1K7vvj7bQAY7YqCRnvrddoSaLp9tbJLn8Y", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "4.233859", + "tokenPool": "1087828330.776868000000000000000000000000000000", + "address": "KT1WtgJSktmmUyAvYbC7YCiQ73xKN6NBH5zc", + "sharesTotal": "66814892", + "midPrice": "0.000000", + "token": { + "address": "KT1K7vvj7bQAY7YqCRnvrddoSaLp9tbJLn8Y", + "decimals": 6, + "symbol": "TILLA", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://static.thenounproject.com/png/1368419-200.png" + } + } + ] + }, + { + "symbol": "CHEESE", + "thumbnailUri": "ipfs://QmSb23SXUJCdz8YYNe7Zk2CB46WwUHP4GR8MztSghC2HV1", + "tokenId": 0, + "decimals": 8, + "address": "KT1URY2DcLd3v6XRjXKYvQmZMBncWYMuphNg", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "2.797140", + "tokenPool": "3487957.458838620000000000000000000000000000", + "address": "KT1Bi5RQGyTNiQubUyLtZYknE5u3Y6CeznWo", + "sharesTotal": "1262542", + "midPrice": "0.000001", + "token": { + "address": "KT1URY2DcLd3v6XRjXKYvQmZMBncWYMuphNg", + "decimals": 8, + "symbol": "CHEESE", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "ipfs://QmSb23SXUJCdz8YYNe7Zk2CB46WwUHP4GR8MztSghC2HV1" + } + } + ] + }, + { + "symbol": "AQRtz", + "thumbnailUri": "ipfs://QmXw8A5wy67oAowS3udHLvYAHbs6qCJiUKgXwzfGsvp5HD", + "tokenId": 0, + "decimals": 14, + "address": "KT19wuExNXayErfuCkcy6Z56cd1FWzF96xXk", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "2211.597070", + "tokenPool": "554951.372684509810300000000000000000000000", + "address": "KT1Sjz9RF7bABNi6rwaoWS8jGNmyf2RxJkrQ", + "sharesTotal": "7713784328", + "midPrice": "0.003985", + "token": { + "address": "KT19wuExNXayErfuCkcy6Z56cd1FWzF96xXk", + "decimals": 14, + "symbol": "AQRtz", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "ipfs://QmXw8A5wy67oAowS3udHLvYAHbs6qCJiUKgXwzfGsvp5HD" + } + } + ] + }, + { + "symbol": "FWA", + "thumbnailUri": "7747e35a81a9522bd58b8c4300c52b4e", + "tokenId": 0, + "decimals": 6, + "address": "KT1RHoasnafRATyhvELE1d2XfrgZPSDTFPEn", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.812726", + "tokenPool": "984845.464152000000000000000000000000000000", + "address": "KT1B4zqgj7HKvDcHZ2n4f6EN1XMHosuUaeiY", + "sharesTotal": "39516630", + "midPrice": "0.000001", + "token": { + "address": "KT1RHoasnafRATyhvELE1d2XfrgZPSDTFPEn", + "decimals": 6, + "symbol": "FWA", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "7747e35a81a9522bd58b8c4300c52b4e" + } + } + ] + }, + { + "symbol": "PXL", + "thumbnailUri": "https://cloudflare-ipfs.com/ipfs/Qma4wzNogtUkuhMgzyKBqzaYBqabLVZrHcLbLmJE38B5XH", + "tokenId": 0, + "decimals": 6, + "address": "KT1F1mn2jbqQCJcsNgYKVAQjvenecNMY2oPK", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "6789.551101", + "tokenPool": "6744437.305345000000000000000000000000000000", + "address": "KT1UJ1hVTdiUen7H3zk1CXGC7PbANb57VkS4", + "sharesTotal": "14078550313", + "midPrice": "0.001007", + "token": { + "address": "KT1F1mn2jbqQCJcsNgYKVAQjvenecNMY2oPK", + "decimals": 6, + "symbol": "PXL", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://cloudflare-ipfs.com/ipfs/Qma4wzNogtUkuhMgzyKBqzaYBqabLVZrHcLbLmJE38B5XH" + } + } + ] + }, + { + "symbol": "pxlDAO", + "thumbnailUri": "https://cloudflare-ipfs.com/ipfs/QmQmcqax9JPHZRdso1zrQYRKLuXauE738C4WNdNs3b4Muw", + "tokenId": 0, + "decimals": 6, + "address": "KT1VQG4kZR6FkF8jppegp8cGhjJF66jJejLf", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "695.141606", + "tokenPool": "219396.764632000000000000000000000000000000", + "address": "KT1RbvTVdb5jiT3dMyc9PxLdjzQD6QJjfZ9G", + "sharesTotal": "8158880579", + "midPrice": "0.003168", + "token": { + "address": "KT1VQG4kZR6FkF8jppegp8cGhjJF66jJejLf", + "decimals": 6, + "symbol": "pxlDAO", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1BVpcBoYaM7VBBpXwx1UAEMPKz7fnHzMpx", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1C1vEApCk6xQ28z884i7jeJkSfKsLFMbUi", - "decimals": 6, - "symbol": "GUNS", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "CANDY", - "address": "KT1TCnvvCjBuZpyKPUGXJd6QRrvupfsJZRUr", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1JEscpJffPqepPvShDJ93DPK8Ez9Cvt7Xi", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1TCnvvCjBuZpyKPUGXJd6QRrvupfsJZRUr", - "decimals": 0, - "symbol": "CANDY", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "PHX", - "address": "KT1JERPhrmVmvCpqoaBbGnYRd4RTayc4ziSf", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1FaVDVefpHDqnBPUTQ2HMV127tUsMZVArn", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1JERPhrmVmvCpqoaBbGnYRd4RTayc4ziSf", - "decimals": 9, - "symbol": "PHX", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, - { - "symbol": "STZ", - "address": "KT1JzicjcZQYMKtK3yWE5wPYxBmZ1mLemHqS", - "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1Tq6syBASKHgULz3jxXTBGqcmnuPW5H6or", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1JzicjcZQYMKtK3yWE5wPYxBmZ1mLemHqS", - "decimals": 4, - "symbol": "STZ", - "tokenId": 0, - "standard": "fa12" - } - } - ] - }, + "standard": "fa2", + "thumbnailUri": "https://cloudflare-ipfs.com/ipfs/QmQmcqax9JPHZRdso1zrQYRKLuXauE738C4WNdNs3b4Muw" + } + } + ] + }, + { + "symbol": "uDEFI", + "thumbnailUri": "ipfs://QmNfosyixuXVG2TGmE7FmLGZGJhK2Q9qHZicsMixsbgqH1", + "tokenId": 1, + "decimals": 12, + "address": "KT1XRPEPXbZK25r3Htzp2o1x7xdMMmfocKNW", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "343.880298", + "tokenPool": "1551.703357903476000000000000000000000000", + "address": "KT1H8sJY2VzrbiX4pYeUVsoMUd4iGw2DV7XH", + "sharesTotal": "313850042", + "midPrice": "0.221615", + "token": { + "address": "KT1XRPEPXbZK25r3Htzp2o1x7xdMMmfocKNW", + "decimals": 12, + "symbol": "uDEFI", + "tokenId": 1, + "standard": "fa2", + "thumbnailUri": "ipfs://QmNfosyixuXVG2TGmE7FmLGZGJhK2Q9qHZicsMixsbgqH1" + } + } + ] + }, + { + "symbol": "SEXP", + "thumbnailUri": null, + "tokenId": 0, + "decimals": 18, + "address": "KT1Kyc366SrSJ1camxByr363F9WAiHAaReMv", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "69.943155", + "tokenPool": "504614071.260427743798710274000000000000000000", + "address": "KT1EVNuwjj7GijvVaxR7Vd9mejy4V6toZkeK", + "sharesTotal": "1298907162", + "midPrice": "0.000000", + "token": { + "address": "KT1Kyc366SrSJ1camxByr363F9WAiHAaReMv", + "decimals": 18, + "symbol": "SEXP", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "GANJA", + "thumbnailUri": "https://s.gravatar.com/avatar/30e17e28c86dc29a24707bada69344ba?s=80", + "tokenId": 0, + "decimals": 0, + "address": "KT1NYhjbPh1mPz6DoBsgBRzpLAUTAJbLP9TU", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "2.121463", + "tokenPool": "2873327.000000000000000000000000000000000000", + "address": "KT1NNdfrEgMLsWbYaPyMKsUXkqTSh8hcPs9X", + "sharesTotal": "4921253", + "midPrice": "0.000001", + "token": { + "address": "KT1NYhjbPh1mPz6DoBsgBRzpLAUTAJbLP9TU", + "decimals": 0, + "symbol": "GANJA", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://s.gravatar.com/avatar/30e17e28c86dc29a24707bada69344ba?s=80" + } + } + ] + }, + { + "symbol": "BTCtz", + "thumbnailUri": "ipfs://QmfAJX4A534cpp2XjDGSM8b8PrqnSt8b7ytuteY8MXkBPD", + "tokenId": 0, + "decimals": 8, + "address": "KT1T87QbpXEVgkwsNPzz8iRoah3SS3D1MDmh", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "11444.554412", + "tokenPool": "0.280067410000000000000000000000000000", + "address": "KT1B6nXwMpGTjYjVQporXUFDQNDGnfCFsx4a", + "sharesTotal": "5571236941", + "midPrice": "40863.570710", + "token": { + "address": "KT1T87QbpXEVgkwsNPzz8iRoah3SS3D1MDmh", + "decimals": 8, + "symbol": "BTCtz", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "ipfs://QmfAJX4A534cpp2XjDGSM8b8PrqnSt8b7ytuteY8MXkBPD" + } + } + ] + }, + { + "symbol": "BRKBLD", + "thumbnailUri": "https://upload.wikimedia.org/wikipedia/commons/f/f1/Heavy_red_%22x%22.png", + "tokenId": 0, + "decimals": 6, + "address": "KT1HRY6ERNuudrU3cFKp2tYTKFNKKdg7FJHy", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1VTUQWz6kccmZGDZpuJkY66k5hqrpMTZ9D", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1HRY6ERNuudrU3cFKp2tYTKFNKKdg7FJHy", + "decimals": 6, + "symbol": "BRKBLD", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://upload.wikimedia.org/wikipedia/commons/f/f1/Heavy_red_%22x%22.png" + } + } + ] + }, + { + "symbol": "tzMeta", + "thumbnailUri": "https://raw.githubusercontent.com/Riku-Rose/logos/main/meta_tezoslogo.png", + "tokenId": 0, + "decimals": 4, + "address": "KT1DR2qLXaAze9Cq1CEUcRjM1qNLBzgureRT", + "exchanges": [ { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1JitjBtBsjjQrMGyA57ScjHSP6JF5zE7eS", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1DR2qLXaAze9Cq1CEUcRjM1qNLBzgureRT", + "decimals": 4, + "symbol": "tzMeta", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://raw.githubusercontent.com/Riku-Rose/logos/main/meta_tezoslogo.png" + } + } + ] + }, + { + "symbol": "POTUS", + "thumbnailUri": "https://cloudflare-ipfs.com/ipfs/QmVw4KUEFbN8HjrMywHMsVFBr2yAfeUbZsm9z9E5u4j6Tm", + "tokenId": 0, + "decimals": 6, + "address": "KT1J9Ys872gGuDLiLUBssMo9FBsBd4ZdhJkj", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1LXm1MbKd9kfTSNZ2ms8iknaJV6mtfFWDZ", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1J9Ys872gGuDLiLUBssMo9FBsBd4ZdhJkj", + "decimals": 6, + "symbol": "POTUS", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://cloudflare-ipfs.com/ipfs/QmVw4KUEFbN8HjrMywHMsVFBr2yAfeUbZsm9z9E5u4j6Tm" + } + } + ] + }, + { + "symbol": "HAM", + "thumbnailUri": "https://assets.petco.com/petco/image/upload/f_auto,q_auto/905909-Center-1", + "tokenId": 0, + "decimals": 2, + "address": "KT1MdBEZd21VuyM9G1RLzUdogfvzv7p6ZM2N", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.255835", + "tokenPool": "4398847.160000000000000000000000000000000000", + "address": "KT1SMeYvV1PS1fhfzLUQzRkHojCLfMuo2K1q", + "sharesTotal": "1058409", + "midPrice": "0.000000", + "token": { + "address": "KT1MdBEZd21VuyM9G1RLzUdogfvzv7p6ZM2N", + "decimals": 2, "symbol": "HAM", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://assets.petco.com/petco/image/upload/f_auto,q_auto/905909-Center-1" + } + } + ] + }, + { + "symbol": "HAM", + "thumbnailUri": "https://assets.petco.com/petco/image/upload/f_auto,q_auto/905909-Center-1", + "tokenId": 0, + "decimals": 2, + "address": "KT1Jbvf1kPjuzUBcWD2rNWXGdPuJf8o1Axy4", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "1.000000", + "tokenPool": "1.000000000000000000000000000000000000", + "address": "KT1G9rDALbT242EAb6kZPxxym7zdSLLwijGS", + "sharesTotal": "1000000", + "midPrice": "1.000000", + "token": { "address": "KT1Jbvf1kPjuzUBcWD2rNWXGdPuJf8o1Axy4", + "decimals": 2, + "symbol": "HAM", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1G9rDALbT242EAb6kZPxxym7zdSLLwijGS", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1Jbvf1kPjuzUBcWD2rNWXGdPuJf8o1Axy4", - "decimals": 2, - "symbol": "HAM", - "tokenId": 0, - "standard": "fa2" - } - } - ] - }, + "standard": "fa2", + "thumbnailUri": "https://assets.petco.com/petco/image/upload/f_auto,q_auto/905909-Center-1" + } + } + ] + }, + { + "symbol": "Cringe", + "thumbnailUri": "ipfs://QmSzc7TC3ACzkC4LaRVvLyMWbVqvZBZuU9bsacNRUdHwSS", + "tokenId": 0, + "decimals": 6, + "address": "KT1TPUhn1tfnZ6V2VShDGWe2y5pQoXycrAoQ", + "exchanges": [ { - "symbol": "FREE", + "name": "quipuswap", + "tezPool": "21.005674", + "tokenPool": "157211.005683000000000000000000000000000000", + "address": "KT1SH7FNKP8EuFtyN3tkEcFukS3HMNU6ygBJ", + "sharesTotal": "57130370", + "midPrice": "0.000134", + "token": { + "address": "KT1TPUhn1tfnZ6V2VShDGWe2y5pQoXycrAoQ", + "decimals": 6, + "symbol": "Cringe", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "ipfs://QmSzc7TC3ACzkC4LaRVvLyMWbVqvZBZuU9bsacNRUdHwSS" + } + } + ] + }, + { + "symbol": "Based", + "thumbnailUri": "ipfs://QmVkpcwCXtUerovHG4jYnTGJfsJkx9vZJeV6mHnQFhWmUq", + "tokenId": 1, + "decimals": 6, + "address": "KT1TPUhn1tfnZ6V2VShDGWe2y5pQoXycrAoQ", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.018358", + "tokenPool": "3026.341727000000000000000000000000000000", + "address": "KT1Gzwqyoiendrr9ZkEK15LhqhSaEQWrSMob", + "sharesTotal": "2306844", + "midPrice": "0.000006", + "token": { + "address": "KT1TPUhn1tfnZ6V2VShDGWe2y5pQoXycrAoQ", + "decimals": 6, + "symbol": "Based", + "tokenId": 1, + "standard": "fa2", + "thumbnailUri": "ipfs://QmVkpcwCXtUerovHG4jYnTGJfsJkx9vZJeV6mHnQFhWmUq" + } + } + ] + }, + { + "symbol": "PND", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmfQ6dqht74Qacc8hLsBrsZ63DMcCzqP3JNSi3bvr1ii3F?preview=1", + "tokenId": 0, + "decimals": 18, + "address": "KT19745bUMrnWevwhtc7eRhw9UeMRyeMfhZG", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000039", + "tokenPool": "0.687502457448432628000000000000000000", + "address": "KT1J4sp89a2Hr2oD75izyTXVPEHwggoPbQSs", + "sharesTotal": "5", + "midPrice": "0.000057", + "token": { + "address": "KT19745bUMrnWevwhtc7eRhw9UeMRyeMfhZG", + "decimals": 18, + "symbol": "PND", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmfQ6dqht74Qacc8hLsBrsZ63DMcCzqP3JNSi3bvr1ii3F?preview=1" + } + } + ] + }, + { + "symbol": "OBJKT", + "thumbnailUri": "ipfs://QmNrhZHUaEqxhyLfqoq1mtHSipkWHeT31LNHb1QEbDHgnc", + "tokenId": 603024, + "decimals": 0, + "address": "KT1RJ6PbjHpwc3M5rw5s2Nbmefwbuwbdxton", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "8.002153", + "tokenPool": "26.000000000000000000000000000000000000", + "address": "KT1UmgNQqESWr25TDkTzfjvSZvGtbzfcmoJT", + "sharesTotal": "12987484", + "midPrice": "0.307775", + "token": { + "address": "KT1RJ6PbjHpwc3M5rw5s2Nbmefwbuwbdxton", + "decimals": 0, + "symbol": "OBJKT", + "tokenId": 603024, + "standard": "fa2", + "thumbnailUri": "ipfs://QmNrhZHUaEqxhyLfqoq1mtHSipkWHeT31LNHb1QEbDHgnc" + } + } + ] + }, + { + "symbol": "PNDc", + "thumbnailUri": "ipfs://QmfQ6dqht74Qacc8hLsBrsZ63DMcCzqP3JNSi3bvr1ii3F?preview=1", + "tokenId": 0, + "decimals": 6, + "address": "KT1VPY88synoNLH4HyTvQ9eFSaxhMpM1vZEG", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.396969", + "tokenPool": "4919.930120000000000000000000000000000000", + "address": "KT1GYF6xvYpPoB3Zkxxy6ekLwkVKSW1B2gqt", + "sharesTotal": "4205235", + "midPrice": "0.000081", + "token": { + "address": "KT1VPY88synoNLH4HyTvQ9eFSaxhMpM1vZEG", + "decimals": 6, + "symbol": "PNDc", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "ipfs://QmfQ6dqht74Qacc8hLsBrsZ63DMcCzqP3JNSi3bvr1ii3F?preview=1" + } + } + ] + }, + { + "symbol": "dUAC", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmX7yGbxjT2WC4TKcsRN6ergHZiG9EbaNqV73Hhc2jg63n", + "tokenId": 0, + "decimals": 8, + "address": "KT1N6eu73zztodRsxhJSMEU7R7sxmyBcCV2t", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "12.315072", + "tokenPool": "65556.044049860000000000000000000000000000", + "address": "KT1E9Ze9JGKZGb4jZne86EqLvLuA3woSZvPV", + "sharesTotal": "10978626", + "midPrice": "0.000188", + "token": { + "address": "KT1N6eu73zztodRsxhJSMEU7R7sxmyBcCV2t", + "decimals": 8, + "symbol": "dUAC", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmX7yGbxjT2WC4TKcsRN6ergHZiG9EbaNqV73Hhc2jg63n" + } + } + ] + }, + { + "symbol": "DKRBT", + "thumbnailUri": "https://bafybeifedhx7txc6mpt73lvt3nm3obj3xhcgjtk63gjza6clvxvg64yw6u.ipfs.dweb.link/", + "tokenId": 0, + "decimals": 2, + "address": "KT18quSVkqhbJS38d5sbRAEkXd5GoNqmAoro", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "1937.140165", + "tokenPool": "2176779.090000000000000000000000000000000000", + "address": "KT1RKdp1rL3c3wxy6XWE8ZdUXdihrGjb4eGB", + "sharesTotal": "633689771", + "midPrice": "0.000890", + "token": { + "address": "KT18quSVkqhbJS38d5sbRAEkXd5GoNqmAoro", + "decimals": 2, + "symbol": "DKRBT", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://bafybeifedhx7txc6mpt73lvt3nm3obj3xhcgjtk63gjza6clvxvg64yw6u.ipfs.dweb.link/" + } + } + ] + }, + { + "symbol": "CHIPS", + "thumbnailUri": "https://ipfs.io/ipfs/QmU6w5hxohb5ckpo6j4683iH9p5JgWv1a99eyG6NJYJ4GP", + "tokenId": 0, + "decimals": 8, + "address": "KT19uWeDEun67XcoPHPs59FFHsS24Jh12osw", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "3.627990", + "tokenPool": "1622179.156721350000000000000000000000000000", + "address": "KT1Fmcb7LXTki2xx9omhzpjsgwhgDNXsrYWs", + "sharesTotal": "2373514482179", + "midPrice": "0.000002", + "token": { + "address": "KT19uWeDEun67XcoPHPs59FFHsS24Jh12osw", + "decimals": 8, + "symbol": "CHIPS", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://ipfs.io/ipfs/QmU6w5hxohb5ckpo6j4683iH9p5JgWv1a99eyG6NJYJ4GP" + } + } + ] + }, + { + "symbol": "FIRE", + "thumbnailUri": "https://ipfs.io/ipfs/QmPAAa3TrWwCq7wpcZzLA6wi7Q9c65tzWh4RRDcvGC5UR6", + "tokenId": 0, + "decimals": 18, + "address": "KT1EjGYcUSBCjRiiJjRDvp8VxsTmtVsXm9NW", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.824317", + "tokenPool": "12142.022450332134273520000000000000000000", + "address": "KT1PLYfoSw4j7AAYb6LGRaL1gFifrsZxqj5g", + "sharesTotal": "1000000", + "midPrice": "0.000068", + "token": { + "address": "KT1EjGYcUSBCjRiiJjRDvp8VxsTmtVsXm9NW", + "decimals": 18, + "symbol": "FIRE", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://ipfs.io/ipfs/QmPAAa3TrWwCq7wpcZzLA6wi7Q9c65tzWh4RRDcvGC5UR6" + } + } + ] + }, + { + "symbol": "DRUM", + "thumbnailUri": "https://raw.githubusercontent.com/AdventurePizza/trydrum-tezos/master/public/drum.png", + "tokenId": 0, + "decimals": 0, + "address": "KT1DX7UdxtzW7bEBihW31kV8Ge4MojAgrLNW", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "4.735717", + "tokenPool": "366451.000000000000000000000000000000000000", + "address": "KT1RE81JDz4vLiExGyaQeQaicHAjdVfveqkL", + "sharesTotal": "130566536", + "midPrice": "0.000013", + "token": { + "address": "KT1DX7UdxtzW7bEBihW31kV8Ge4MojAgrLNW", + "decimals": 0, + "symbol": "DRUM", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://raw.githubusercontent.com/AdventurePizza/trydrum-tezos/master/public/drum.png" + } + } + ] + }, + { + "symbol": "FIRE", + "thumbnailUri": "https://ipfs.io/ipfs/QmPAAa3TrWwCq7wpcZzLA6wi7Q9c65tzWh4RRDcvGC5UR6", + "tokenId": 0, + "decimals": 18, + "address": "KT1RNMMyGrh6XoiV15eD34iUCaiMkNeLPZC6", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "1.000000", + "tokenPool": "1.000000000000000000000000000000000000", + "address": "KT1BxQyq6dAQhJ5F3VRHjvcrEwi7kDwPTWA7", + "sharesTotal": "1000000", + "midPrice": "1.000000", + "token": { + "address": "KT1RNMMyGrh6XoiV15eD34iUCaiMkNeLPZC6", + "decimals": 18, + "symbol": "FIRE", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://ipfs.io/ipfs/QmPAAa3TrWwCq7wpcZzLA6wi7Q9c65tzWh4RRDcvGC5UR6" + } + } + ] + }, + { + "symbol": "TezDAO", + "thumbnailUri": "https://tezdao.org/assets/TezDAO-icon.png", + "tokenId": 0, + "decimals": 6, + "address": "KT1C9X9s5rpVJGxwVuHEVBLYEdAQ1Qw8QDjH", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "165.670628", + "tokenPool": "54312875.489155000000000000000000000000000000", + "address": "KT19g5hey69CiXRbhRzJEwvuJ95RgVLzS3TP", + "sharesTotal": "87163639704", + "midPrice": "0.000003", + "token": { + "address": "KT1C9X9s5rpVJGxwVuHEVBLYEdAQ1Qw8QDjH", + "decimals": 6, + "symbol": "TezDAO", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://tezdao.org/assets/TezDAO-icon.png" + } + } + ] + }, + { + "symbol": "STV", + "thumbnailUri": "https://dweb.link/ipfs/Qmc4d4heREFwnLitFggtz4ATHPzHvD8mJu3wSfA35v3ZK7", + "tokenId": 0, + "decimals": 8, + "address": "KT1CxE36bXiCJnLZ9C9z1Ma921qu3ksmeZxc", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "164.968165", + "tokenPool": "239135.162779270000000000000000000000000000", + "address": "KT1EDKhwYY9h8UuoxN6KpexoCT8xoaTRVAzv", + "sharesTotal": "1952572821", + "midPrice": "0.000690", + "token": { + "address": "KT1CxE36bXiCJnLZ9C9z1Ma921qu3ksmeZxc", + "decimals": 8, + "symbol": "STV", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://dweb.link/ipfs/Qmc4d4heREFwnLitFggtz4ATHPzHvD8mJu3wSfA35v3ZK7" + } + } + ] + }, + { + "symbol": "MTRIA", + "thumbnailUri": "ipfs://QmRrvFBwRKK8cQ6yKXEX38Q34wrWK6FBbCvQPzun5e4kjP", + "tokenId": 0, + "decimals": 6, + "address": "KT1KRvNVubq64ttPbQarxec5XdS6ZQU4DVD2", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "30.043612", + "tokenPool": "1159.178884000000000000000000000000000000", + "address": "KT1FptuULGK69mZRsBz62CSFdRs52etEb6Ah", + "sharesTotal": "502561817", + "midPrice": "0.025918", + "token": { + "address": "KT1KRvNVubq64ttPbQarxec5XdS6ZQU4DVD2", + "decimals": 6, + "symbol": "MTRIA", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "ipfs://QmRrvFBwRKK8cQ6yKXEX38Q34wrWK6FBbCvQPzun5e4kjP" + } + } + ] + }, + { + "symbol": "RTQLA", + "thumbnailUri": "https://static.thenounproject.com/png/217184-200.png", + "tokenId": 0, + "decimals": 6, + "address": "KT1QHcRL3FZRpQruFkb1GBYwfqoPXTFGipRH", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "14.432471", + "tokenPool": "82.615915000000000000000000000000000000", + "address": "KT1CASqMygFhCwa8LFQwNhRTJHmqvbbyXyCc", + "sharesTotal": "22769381", + "midPrice": "0.174694", + "token": { + "address": "KT1QHcRL3FZRpQruFkb1GBYwfqoPXTFGipRH", + "decimals": 6, + "symbol": "RTQLA", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://static.thenounproject.com/png/217184-200.png" + } + } + ] + }, + { + "symbol": "uBTC", + "thumbnailUri": null, + "tokenId": 2, + "decimals": 12, + "address": "KT1XRPEPXbZK25r3Htzp2o1x7xdMMmfocKNW", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "269.229366", + "tokenPool": "0.006177440506000000000000000000000000", + "address": "KT1Ao9HNxW9tqGMAvAMGyvP36VhJEUGWVRpx", + "sharesTotal": "137392285", + "midPrice": "43582.672425", + "token": { + "address": "KT1XRPEPXbZK25r3Htzp2o1x7xdMMmfocKNW", + "decimals": 12, + "symbol": "uBTC", + "tokenId": 2, + "standard": "fa2", + "thumbnailUri": null + } + } + ] + }, + { + "symbol": "FREE", + "thumbnailUri": "FREE", + "tokenId": 0, + "decimals": 5, + "address": "KT1G12BEC48HDhp1LvmKJReny7HpGRUkmE6A", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1HFeGiKmUNSuB1kYuNibM7oGDc1cGqvrRw", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { "address": "KT1G12BEC48HDhp1LvmKJReny7HpGRUkmE6A", + "decimals": 5, + "symbol": "FREE", "tokenId": 0, - "exchanges": [ - { - "name": "quipuswap", - "tezPool": "0.000000", - "tokenPool": "0.000000000000000000000000000000000000", - "address": "KT1HFeGiKmUNSuB1kYuNibM7oGDc1cGqvrRw", - "sharesTotal": "0", - "midPrice": "0.000000", - "token": { - "address": "KT1G12BEC48HDhp1LvmKJReny7HpGRUkmE6A", - "decimals": 5, - "symbol": "FREE", - "tokenId": 0, - "standard": "fa2" - } - } - ] - } - ] + "standard": "fa2", + "thumbnailUri": "FREE" + } + } + ] + }, + { + "symbol": "MILK", + "thumbnailUri": "ipfs://QmYmrRag2dmKXmgtTzRwqvyQNX77STty7XwAVLzHyh1YSj", + "tokenId": 0, + "decimals": 8, + "address": "KT1EBpRMdK98rPpaXqJeW4822WAdwXYNL64d", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.581598", + "tokenPool": "509139280.037571760000000000000000000000000000", + "address": "KT1LLxJJpceTFHin2atm3e2TY4Kj5mJCgzSR", + "sharesTotal": "53733169", + "midPrice": "0.000000", + "token": { + "address": "KT1EBpRMdK98rPpaXqJeW4822WAdwXYNL64d", + "decimals": 8, + "symbol": "MILK", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "ipfs://QmYmrRag2dmKXmgtTzRwqvyQNX77STty7XwAVLzHyh1YSj" + } + } + ] + }, + { + "symbol": "INDICA", + "thumbnailUri": "https://s.gravatar.com/avatar/47df7358377d7199b0cbe26dd4639481?s=80", + "tokenId": 0, + "decimals": 0, + "address": "KT1MxjTwTB5nxuQ4LrtzPCyktBXMA5XJFe3N", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.136497", + "tokenPool": "4489386200.000000000000000000000000000000000000", + "address": "KT1NBKcXDwieEBusbguznQfziCAMh8nsgQTZ", + "sharesTotal": "390285", + "midPrice": "0.000000", + "token": { + "address": "KT1MxjTwTB5nxuQ4LrtzPCyktBXMA5XJFe3N", + "decimals": 0, + "symbol": "INDICA", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://s.gravatar.com/avatar/47df7358377d7199b0cbe26dd4639481?s=80" + } + } + ] + }, + { + "symbol": "SATIVA", + "thumbnailUri": "https://s.gravatar.com/avatar/d803c5c935d0616da84900573e88ff6f?s=80", + "tokenId": 0, + "decimals": 0, + "address": "KT1TwydTCPv6EPJnVBPu8rHsPS4xTG69vdQ1", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1F13QkMqZLUo9tihBYvR4uk1GDbzRwm4k3", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1TwydTCPv6EPJnVBPu8rHsPS4xTG69vdQ1", + "decimals": 0, + "symbol": "SATIVA", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://s.gravatar.com/avatar/d803c5c935d0616da84900573e88ff6f?s=80" + } + } + ] + }, + { + "symbol": "OBJKT", + "thumbnailUri": "ipfs://QmNrhZHUaEqxhyLfqoq1mtHSipkWHeT31LNHb1QEbDHgnc", + "tokenId": 649760, + "decimals": 0, + "address": "KT1RJ6PbjHpwc3M5rw5s2Nbmefwbuwbdxton", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.100000", + "tokenPool": "1.000000000000000000000000000000000000", + "address": "KT1KDau5rZdaYyRqFEMc5iPt5gfAusRryWRV", + "sharesTotal": "100000", + "midPrice": "0.100000", + "token": { + "address": "KT1RJ6PbjHpwc3M5rw5s2Nbmefwbuwbdxton", + "decimals": 0, + "symbol": "OBJKT", + "tokenId": 649760, + "standard": "fa2", + "thumbnailUri": "ipfs://QmNrhZHUaEqxhyLfqoq1mtHSipkWHeT31LNHb1QEbDHgnc" + } + } + ] + }, + { + "symbol": "ASH", + "thumbnailUri": "https://bafybeie5cjmzl2itoh3ggbgrmal7wxe6yu7nci2cskj7eadioyowjoi474.ipfs.dweb.link/?preview=1", + "tokenId": 0, + "decimals": 6, + "address": "KT1EVPNZtekBirJhvALU5gNJS2F3ibWZXnpd", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.267041", + "tokenPool": "49.439776000000000000000000000000000000", + "address": "KT1QwyZqLtSmb1kTFxs4rzEGaJac3RmuGwzh", + "sharesTotal": "3276517", + "midPrice": "0.005401", + "token": { + "address": "KT1EVPNZtekBirJhvALU5gNJS2F3ibWZXnpd", + "decimals": 6, + "symbol": "ASH", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://bafybeie5cjmzl2itoh3ggbgrmal7wxe6yu7nci2cskj7eadioyowjoi474.ipfs.dweb.link/?preview=1" + } + } + ] + }, + { + "symbol": "SMC", + "thumbnailUri": "https://periodictable.com/Samples/031.8/s13.JPG", + "tokenId": 0, + "decimals": 10, + "address": "KT1GUw9a8ipuxcyEreuF4b6xKjUMr448tqKT", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "4.000000", + "tokenPool": "1000.000000000000000000000000000000000000", + "address": "KT1EAveAZTDnhnh3BeTDCVS9BWdt2kiWttRd", + "sharesTotal": "4000000", + "midPrice": "0.004000", + "token": { + "address": "KT1GUw9a8ipuxcyEreuF4b6xKjUMr448tqKT", + "decimals": 10, + "symbol": "SMC", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://periodictable.com/Samples/031.8/s13.JPG" + } + } + ] + }, + { + "symbol": "DRIP", + "thumbnailUri": "https://bitbirds.art/drip.png", + "tokenId": 0, + "decimals": 8, + "address": "KT1XsmJTskZtrJUUmaz3D7nynaZ28mM8HCez", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "115.043539", + "tokenPool": "957650.875219130000000000000000000000000000", + "address": "KT1HWT1vYFyn1t1y5z1Ma2SWr8Lx8UzGjCwM", + "sharesTotal": "104722411", + "midPrice": "0.000120", + "token": { + "address": "KT1XsmJTskZtrJUUmaz3D7nynaZ28mM8HCez", + "decimals": 8, + "symbol": "DRIP", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://bitbirds.art/drip.png" + } + } + ] + }, + { + "symbol": "WAGMI", + "thumbnailUri": "https://s.gravatar.com/avatar/ec496560e3a6a7ccba79027cbbf08d29?s=80", + "tokenId": 0, + "decimals": 0, + "address": "KT1CQP8yjNJM3cn1hyJYtqhmzwUBvv7Xdwg5", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1G3H7Rabp1XF4SwbQHnq8taZjHVaZQuquV", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1CQP8yjNJM3cn1hyJYtqhmzwUBvv7Xdwg5", + "decimals": 0, + "symbol": "WAGMI", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://s.gravatar.com/avatar/ec496560e3a6a7ccba79027cbbf08d29?s=80" + } + } + ] + }, + { + "symbol": "YOLO", + "thumbnailUri": "https://s.gravatar.com/avatar/b8fb8190ebd94d5179d9354df1b30315?s=80", + "tokenId": 0, + "decimals": 0, + "address": "KT1RNVvATTSoha3yYVteATvhFSj92QqsKswm", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1EEhbWVEE5CpaHKZq1oTT8HfvhjssMcHgT", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1RNVvATTSoha3yYVteATvhFSj92QqsKswm", + "decimals": 0, + "symbol": "YOLO", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://s.gravatar.com/avatar/b8fb8190ebd94d5179d9354df1b30315?s=80" + } + } + ] + }, + { + "symbol": "GM", + "thumbnailUri": "https://s.gravatar.com/avatar/f81e11d13fe5eefa6448045a522cf046?s=80", + "tokenId": 0, + "decimals": 0, + "address": "KT1WNQspJzgUQ4UnqRrzZFKexkP1ZeLTYFLW", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1FAnDhmh1LzpJVsMZSABgA2XKvFafnHL7H", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1WNQspJzgUQ4UnqRrzZFKexkP1ZeLTYFLW", + "decimals": 0, + "symbol": "GM", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://s.gravatar.com/avatar/f81e11d13fe5eefa6448045a522cf046?s=80" + } + } + ] + }, + { + "symbol": "ASH2", + "thumbnailUri": "ipfs://QmfJygnN5mMZkwe6irZj6KoNDTCegThhYv2R4EEcYAJvSF", + "tokenId": 0, + "decimals": 6, + "address": "KT19SH9xxZcNKK5uiFuD7XUX8DzzrBGXHVwK", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "2.929265", + "tokenPool": "271517.653297000000000000000000000000000000", + "address": "KT1T1atrHSnmYPo7z3TkgufWi8WbNKkcRcqv", + "sharesTotal": "50000000", + "midPrice": "0.000011", + "token": { + "address": "KT19SH9xxZcNKK5uiFuD7XUX8DzzrBGXHVwK", + "decimals": 6, + "symbol": "ASH2", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "ipfs://QmfJygnN5mMZkwe6irZj6KoNDTCegThhYv2R4EEcYAJvSF" + } + } + ] + }, + { + "symbol": "PABLITO", + "thumbnailUri": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ5veTqj456aKEx7brn2UBLQiHadY6kDWMOfQ&usqp=CAU", + "tokenId": 0, + "decimals": 2, + "address": "KT1Losz7CHHLzVRGPtvybXQmwNTmGEEWB6u8", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "1.000000", + "tokenPool": "2.000000000000000000000000000000000000", + "address": "KT1GvLqXnQwMgu3fGGvh4gG5Yzc6ysgx23EL", + "sharesTotal": "1000000", + "midPrice": "0.500000", + "token": { + "address": "KT1Losz7CHHLzVRGPtvybXQmwNTmGEEWB6u8", + "decimals": 2, + "symbol": "PABLITO", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ5veTqj456aKEx7brn2UBLQiHadY6kDWMOfQ&usqp=CAU" + } + } + ] + }, + { + "symbol": "DOG", + "thumbnailUri": "ipfs://QmeRUvFuGbS8oP7kSpr53edQqd81KHTTVk7EHTHUhmcSdf", + "tokenId": 0, + "decimals": 6, + "address": "KT1X125rpfx7v2jxApYKQknh5gkkDWHJVuCn", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.518805", + "tokenPool": "1932.225478000000000000000000000000000000", + "address": "KT1TYYGY8ftgq4BuVFDpN3zJtbugHQvimBN5", + "sharesTotal": "1000000", + "midPrice": "0.000269", + "token": { + "address": "KT1X125rpfx7v2jxApYKQknh5gkkDWHJVuCn", + "decimals": 6, + "symbol": "DOG", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "ipfs://QmeRUvFuGbS8oP7kSpr53edQqd81KHTTVk7EHTHUhmcSdf" + } + } + ] + }, + { + "symbol": "BRD", + "thumbnailUri": "ipfs://QmeGcgGXGWjTqVCHoe7zfbiUnJ8LReX2NaCM6wJWH78qNU", + "tokenId": 1, + "decimals": 12, + "address": "KT1X125rpfx7v2jxApYKQknh5gkkDWHJVuCn", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.716336", + "tokenPool": "2808.319437073116000000000000000000000000", + "address": "KT1WDwFqSPDFvcXByTPRrRVZcHv2TFBAniJh", + "sharesTotal": "1000000", + "midPrice": "0.000255", + "token": { + "address": "KT1X125rpfx7v2jxApYKQknh5gkkDWHJVuCn", + "decimals": 12, + "symbol": "BRD", + "tokenId": 1, + "standard": "fa2", + "thumbnailUri": "ipfs://QmeGcgGXGWjTqVCHoe7zfbiUnJ8LReX2NaCM6wJWH78qNU" + } + } + ] + }, + { + "symbol": "LARVAS", + "thumbnailUri": "https://s.gravatar.com/avatar/f7c7c67d7785118016cfb8e8fc247148?s=80", + "tokenId": 0, + "decimals": 0, + "address": "KT1BVgsihWTDsszuL47NRznzV3gz65uKj9TV", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.513018", + "tokenPool": "7581991305.000000000000000000000000000000000000", + "address": "KT1DYrNDSKjZ5uLw4T68w5TMsKy3ombuWt5x", + "sharesTotal": "581113", + "midPrice": "0.000000", + "token": { + "address": "KT1BVgsihWTDsszuL47NRznzV3gz65uKj9TV", + "decimals": 0, + "symbol": "LARVAS", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://s.gravatar.com/avatar/f7c7c67d7785118016cfb8e8fc247148?s=80" + } + } + ] + }, + { + "symbol": "GLRY", + "thumbnailUri": "https://glry.xyz/assets/logo/logo-512x512.png", + "tokenId": 0, + "decimals": 0, + "address": "KT1XLjvcg2Liyy4tsvKuBzmM34Kv7B71GY3V", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "11.120224", + "tokenPool": "9.000000000000000000000000000000000000", + "address": "KT1UdarvEq7utoSkjYVP3AQ7SLSuL4gUrhWF", + "sharesTotal": "10000000", + "midPrice": "1.235580", + "token": { + "address": "KT1XLjvcg2Liyy4tsvKuBzmM34Kv7B71GY3V", + "decimals": 0, + "symbol": "GLRY", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://glry.xyz/assets/logo/logo-512x512.png" + } + } + ] + }, + { + "symbol": "CEN", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmeQPDDbaxPapQa3WxXRvEmfUdt9WYkvBQahcLmtQZMntN", + "tokenId": 0, + "decimals": 8, + "address": "KT1Pp8ZcabqrqjPQpsBWZPdGr3qS62JooQSi", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1NNMGcCs9Afm87esXbKUmU3mv2KLngrqGK", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1Pp8ZcabqrqjPQpsBWZPdGr3qS62JooQSi", + "decimals": 8, + "symbol": "CEN", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://gateway.pinata.cloud/ipfs/QmeQPDDbaxPapQa3WxXRvEmfUdt9WYkvBQahcLmtQZMntN" + } + } + ] + }, + { + "symbol": "ASH3", + "thumbnailUri": "ipfs://QmWSQFuarPivbbvJqC4DUdvqpEmfNogai9r1SQYTFeqefW", + "tokenId": 0, + "decimals": 6, + "address": "KT1UUqpFMF1PL9kc6LptW6c2v7KUwUJVSENC", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000011", + "tokenPool": "0.934224000000000000000000000000000000", + "address": "KT1DGdeZ4ZkKz6iZUbG32EJEjpNY3nA4gpp3", + "sharesTotal": "10", + "midPrice": "0.000012", + "token": { + "address": "KT1UUqpFMF1PL9kc6LptW6c2v7KUwUJVSENC", + "decimals": 6, + "symbol": "ASH3", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "ipfs://QmWSQFuarPivbbvJqC4DUdvqpEmfNogai9r1SQYTFeqefW" + } + } + ] + }, + { + "symbol": "WRC", + "thumbnailUri": "ipfs://QmcX1z3XdpM1UrwjWpWhTCtHYKkFsX8xTj3BLzvkGhhaus", + "tokenId": 0, + "decimals": 18, + "address": "KT19Fmya7B49wKYdoqXYphyQWGRUn9g5wG8R", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "600.231852", + "tokenPool": "24647534.167314425542887279000000000000000000", + "address": "KT19bjUk54JimXKiEM569CgSXR3C3mjGjGPE", + "sharesTotal": "663286678", + "midPrice": "0.000024", + "token": { + "address": "KT19Fmya7B49wKYdoqXYphyQWGRUn9g5wG8R", + "decimals": 18, + "symbol": "WRC", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "ipfs://QmcX1z3XdpM1UrwjWpWhTCtHYKkFsX8xTj3BLzvkGhhaus" + } + } + ] + }, + { + "symbol": "EURL", + "thumbnailUri": "ipfs://QmcqsYQn8pTxQr3P1dYpgYxQa6GQPmoBTSWQ8bpuFEuaqe", + "tokenId": 0, + "decimals": 6, + "address": "KT1JBNFcB5tiycHNdYGYCtR3kk6JaJysUCi8", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "216.765132", + "tokenPool": "214.383349000000000000000000000000000000", + "address": "KT1Kez11aTuwa7amQc3jZUxmcsDLoBeV82mX", + "sharesTotal": "153276977", + "midPrice": "1.011110", + "token": { + "address": "KT1JBNFcB5tiycHNdYGYCtR3kk6JaJysUCi8", + "decimals": 6, + "symbol": "EURL", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "ipfs://QmcqsYQn8pTxQr3P1dYpgYxQa6GQPmoBTSWQ8bpuFEuaqe" + } + } + ] + }, + { + "symbol": "ASH4", + "thumbnailUri": "ipfs://QmfYwHkqYMPEMDL8UBu2zM55js9BJmVka3Li5ypLwGQc6K", + "tokenId": 0, + "decimals": 6, + "address": "KT1KRqNfeVBXJ26bgqfQD3sPma7Wv6Mc1rfc", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.003872", + "tokenPool": "2620.242788000000000000000000000000000000", + "address": "KT1GzHSPVm1d7GKL9jjSAM4i1Ub3JQVue7VZ", + "sharesTotal": "1000000", + "midPrice": "0.000001", + "token": { + "address": "KT1KRqNfeVBXJ26bgqfQD3sPma7Wv6Mc1rfc", + "decimals": 6, + "symbol": "ASH4", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "ipfs://QmfYwHkqYMPEMDL8UBu2zM55js9BJmVka3Li5ypLwGQc6K" + } + } + ] + }, + { + "symbol": "3P", + "thumbnailUri": "https://www.thr33p3nny.com/images/token_logo.png", + "tokenId": 0, + "decimals": 6, + "address": "KT1CegZeeBZLjvy2oD4gcZwf17ucs4fwvXH8", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "74.127178", + "tokenPool": "395758.890341000000000000000000000000000000", + "address": "KT1Kst3eyiY6e4E2CnFvuQHirfCShuWP6ent", + "sharesTotal": "16592695260", + "midPrice": "0.000187", + "token": { + "address": "KT1CegZeeBZLjvy2oD4gcZwf17ucs4fwvXH8", + "decimals": 6, + "symbol": "3P", + "tokenId": 0, + "standard": "fa2", + "thumbnailUri": "https://www.thr33p3nny.com/images/token_logo.png" + } + } + ] + }, + { + "symbol": "BUSD.e", + "thumbnailUri": "ipfs://bafybeidzwaurmronh7acpctit44q53riuwjsvp6b2r4hxublkeb3zhlkru", + "tokenId": 7, + "decimals": 18, + "address": "KT1UsSfaXyqcjSVPeiD7U1bWgKy3taYN7NWY", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1HhfKt2Wp3eNgTEiw4beG66BscnMDUe28t", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1UsSfaXyqcjSVPeiD7U1bWgKy3taYN7NWY", + "decimals": 18, + "symbol": "BUSD.e", + "tokenId": 7, + "standard": "fa2", + "thumbnailUri": "ipfs://bafybeidzwaurmronh7acpctit44q53riuwjsvp6b2r4hxublkeb3zhlkru" + } + } + ] + }, + { + "symbol": "DAI.e", + "thumbnailUri": "ipfs://bafybeicqbt2gepdljrjpcsaypkyjhbmuvra6jkpcwmmw6qgtwfu7dcdezy", + "tokenId": 6, + "decimals": 18, + "address": "KT1UsSfaXyqcjSVPeiD7U1bWgKy3taYN7NWY", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "1.154909", + "tokenPool": "1.151624525833852204000000000000000000", + "address": "KT1LSftmRRGqY1s7GHywmYyJcnqV6RRPmHbc", + "sharesTotal": "944452", + "midPrice": "1.002852", + "token": { + "address": "KT1UsSfaXyqcjSVPeiD7U1bWgKy3taYN7NWY", + "decimals": 18, + "symbol": "DAI.e", + "tokenId": 6, + "standard": "fa2", + "thumbnailUri": "ipfs://bafybeicqbt2gepdljrjpcsaypkyjhbmuvra6jkpcwmmw6qgtwfu7dcdezy" + } + } + ] + }, + { + "symbol": "USDT.e", + "thumbnailUri": "ipfs://bafybeibi45na6dimqwdznpj6m254vos6hez7232mqrrbj27xzwsh36gz4i", + "tokenId": 3, + "decimals": 6, + "address": "KT1UsSfaXyqcjSVPeiD7U1bWgKy3taYN7NWY", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT1FqPZ4vf4eGCKRB5MSNdK6qMdtMiR45Fwv", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1UsSfaXyqcjSVPeiD7U1bWgKy3taYN7NWY", + "decimals": 6, + "symbol": "USDT.e", + "tokenId": 3, + "standard": "fa2", + "thumbnailUri": "ipfs://bafybeibi45na6dimqwdznpj6m254vos6hez7232mqrrbj27xzwsh36gz4i" + } + } + ] + }, + { + "symbol": "LINK.e", + "thumbnailUri": "ipfs://bafybeic4q4bet3il3gdwgjqxs4i2czi6uujbyltan7liat5oyxmccp5sce", + "tokenId": 5, + "decimals": 18, + "address": "KT1UsSfaXyqcjSVPeiD7U1bWgKy3taYN7NWY", + "exchanges": [ + { + "name": "quipuswap", + "tezPool": "0.000000", + "tokenPool": "0.000000000000000000000000000000000000", + "address": "KT193vJRsjM9qJA7PVD7LzJhyKTWPvdq5RGd", + "sharesTotal": "0", + "midPrice": "0.000000", + "token": { + "address": "KT1UsSfaXyqcjSVPeiD7U1bWgKy3taYN7NWY", + "decimals": 18, + "symbol": "LINK.e", + "tokenId": 5, + "standard": "fa2", + "thumbnailUri": "ipfs://bafybeic4q4bet3il3gdwgjqxs4i2czi6uujbyltan7liat5oyxmccp5sce" + } + } + ] + } + ] } -} \ No newline at end of file + } \ No newline at end of file diff --git a/Tests/KukaiCoreSwiftTests/Stubs/objkt-bid-with-wrap.json b/Tests/KukaiCoreSwiftTests/Stubs/objkt-bid-with-wrap.json new file mode 100644 index 00000000..acf31911 --- /dev/null +++ b/Tests/KukaiCoreSwiftTests/Stubs/objkt-bid-with-wrap.json @@ -0,0 +1,109 @@ +[ + { + "amount": "201000000", + "counter": "95756302", + "destination": "KT1TjnZYs5CGLbmV6yuW169P8Pnr9BiVwwjz", + "fee": "0", + "gas_limit": "520000", + "kind": "transaction", + "parameters": { + "entrypoint": "wrap", + "value": { + "args": [ + { + "string": "tz1bJyyFMMWhwkdKSi7Ud8fimu72yfjNC44j" + } + ], + "prim": "Some" + } + }, + "source": "tz1bJyyFMMWhwkdKSi7Ud8fimu72yfjNC44j", + "storage_limit": "60000" + }, + { + "amount": "0", + "counter": "95756303", + "destination": "KT1TjnZYs5CGLbmV6yuW169P8Pnr9BiVwwjz", + "fee": "0", + "gas_limit": "520000", + "kind": "transaction", + "parameters": { + "entrypoint": "approve", + "value": { + "args": [ + { + "string": "KT18iSHoRW1iogamADWwQSDoZa3QkN4izkqj" + }, + { + "int": "0" + } + ], + "prim": "Pair" + } + }, + "source": "tz1bJyyFMMWhwkdKSi7Ud8fimu72yfjNC44j", + "storage_limit": "60000" + }, + { + "amount": "0", + "counter": "95756304", + "destination": "KT1TjnZYs5CGLbmV6yuW169P8Pnr9BiVwwjz", + "fee": "0", + "gas_limit": "520000", + "kind": "transaction", + "parameters": { + "entrypoint": "approve", + "value": { + "args": [ + { + "string": "KT18iSHoRW1iogamADWwQSDoZa3QkN4izkqj" + }, + { + "int": "201000000" + } + ], + "prim": "Pair" + } + }, + "source": "tz1bJyyFMMWhwkdKSi7Ud8fimu72yfjNC44j", + "storage_limit": "60000" + }, + { + "amount": "0", + "counter": "95756305", + "destination": "KT18iSHoRW1iogamADWwQSDoZa3QkN4izkqj", + "fee": "0", + "gas_limit": "520000", + "kind": "transaction", + "parameters": { + "entrypoint": "bid", + "value": { + "args": [ + { + "int": "2004532" + }, + { + "args": [ + { + "int": "201000000" + }, + { + "args": [ + [], + { + "prim": "None" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + }, + "source": "tz1bJyyFMMWhwkdKSi7Ud8fimu72yfjNC44j", + "storage_limit": "60000" + } +] \ No newline at end of file diff --git a/Tests/KukaiCoreSwiftTests/Stubs/objkt-bid.json b/Tests/KukaiCoreSwiftTests/Stubs/objkt-bid.json new file mode 100644 index 00000000..4fe28438 --- /dev/null +++ b/Tests/KukaiCoreSwiftTests/Stubs/objkt-bid.json @@ -0,0 +1,88 @@ +[ + { + "amount": "0", + "counter": "95756303", + "destination": "KT1TjnZYs5CGLbmV6yuW169P8Pnr9BiVwwjz", + "fee": "0", + "gas_limit": "520000", + "kind": "transaction", + "parameters": { + "entrypoint": "approve", + "value": { + "args": [ + { + "string": "KT18iSHoRW1iogamADWwQSDoZa3QkN4izkqj" + }, + { + "int": "0" + } + ], + "prim": "Pair" + } + }, + "source": "tz1bJyyFMMWhwkdKSi7Ud8fimu72yfjNC44j", + "storage_limit": "60000" + }, + { + "amount": "0", + "counter": "95756304", + "destination": "KT1TjnZYs5CGLbmV6yuW169P8Pnr9BiVwwjz", + "fee": "0", + "gas_limit": "520000", + "kind": "transaction", + "parameters": { + "entrypoint": "approve", + "value": { + "args": [ + { + "string": "KT18iSHoRW1iogamADWwQSDoZa3QkN4izkqj" + }, + { + "int": "201000000" + } + ], + "prim": "Pair" + } + }, + "source": "tz1bJyyFMMWhwkdKSi7Ud8fimu72yfjNC44j", + "storage_limit": "60000" + }, + { + "amount": "0", + "counter": "95756305", + "destination": "KT18iSHoRW1iogamADWwQSDoZa3QkN4izkqj", + "fee": "0", + "gas_limit": "520000", + "kind": "transaction", + "parameters": { + "entrypoint": "bid", + "value": { + "args": [ + { + "int": "2004532" + }, + { + "args": [ + { + "int": "201000000" + }, + { + "args": [ + [], + { + "prim": "None" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + }, + "source": "tz1bJyyFMMWhwkdKSi7Ud8fimu72yfjNC44j", + "storage_limit": "60000" + } +] \ No newline at end of file diff --git a/Tests/KukaiCoreSwiftTests/Stubs/objkt-offer-fa1.json b/Tests/KukaiCoreSwiftTests/Stubs/objkt-offer-fa1.json new file mode 100644 index 00000000..d98d6577 --- /dev/null +++ b/Tests/KukaiCoreSwiftTests/Stubs/objkt-offer-fa1.json @@ -0,0 +1,164 @@ +[ + { + "amount": "0", + "counter": "95756302", + "destination": "KT1LN4LPSqTMS7Sd2CJw4bbDGRkMv2t68Fy9", + "fee": "0", + "gas_limit": "1590", + "kind": "transaction", + "parameters": { + "entrypoint": "approve", + "value": { + "args": [ + { + "string": "KT1Xjap1TwmDR1d8yEd8ErkraAj2mbdMrPZY" + }, + { + "int": "0" + } + ], + "prim": "Pair" + } + }, + "source": "tz1bJyyFMMWhwkdKSi7Ud8fimu72yfjNC44j", + "storage_limit": "0" + }, + { + "amount": "0", + "counter": "95756303", + "destination": "KT1LN4LPSqTMS7Sd2CJw4bbDGRkMv2t68Fy9", + "fee": "0", + "gas_limit": "1516", + "kind": "transaction", + "parameters": { + "entrypoint": "approve", + "value": { + "args": [ + { + "string": "KT1Xjap1TwmDR1d8yEd8ErkraAj2mbdMrPZY" + }, + { + "int": "1000000000000000000000000000000" + } + ], + "prim": "Pair" + } + }, + "source": "tz1bJyyFMMWhwkdKSi7Ud8fimu72yfjNC44j", + "storage_limit": "0" + }, + { + "amount": "0", + "counter": "95756304", + "destination": "KT1Xjap1TwmDR1d8yEd8ErkraAj2mbdMrPZY", + "fee": "1327", + "gas_limit": "2319", + "kind": "transaction", + "parameters": { + "entrypoint": "offer", + "value": { + "args": [ + { + "args": [ + { + "string": "KT1Feeb2hAvAnR4vqU2XC5HKXdQNYUZLbHsM" + }, + { + "args": [ + { + "int": "103" + } + ], + "prim": "Some" + } + ], + "prim": "Pair" + }, + { + "args": [ + { + "args": [ + { + "string": "KT1LN4LPSqTMS7Sd2CJw4bbDGRkMv2t68Fy9" + } + ], + "prim": "Left" + }, + { + "args": [ + { + "int": "478000" + }, + { + "args": [ + [ + { + "args": [ + { + "string": "tz1YSJxjgZh9vLFEECTQewWtECQiSVbxQaHo" + }, + { + "int": "200" + } + ], + "prim": "Elt" + }, + { + "args": [ + { + "string": "tz1ZWR2RYnEGTCFPBw5UKDbM6EPN6BhSM1pH" + }, + { + "int": "800" + } + ], + "prim": "Elt" + } + ], + { + "args": [ + { + "args": [ + { + "string": "2024-04-19T15:05:44.505Z" + } + ], + "prim": "Some" + }, + { + "args": [ + [], + { + "args": [ + { + "prim": "None" + }, + { + "prim": "None" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + }, + "source": "tz1bJyyFMMWhwkdKSi7Ud8fimu72yfjNC44j", + "storage_limit": "251" + } +] \ No newline at end of file diff --git a/Tests/KukaiCoreSwiftTests/Stubs/operation-factory-extractor-multiple-send-in-param.json b/Tests/KukaiCoreSwiftTests/Stubs/operation-factory-extractor-multiple-send-in-param.json new file mode 100644 index 00000000..74bbed73 --- /dev/null +++ b/Tests/KukaiCoreSwiftTests/Stubs/operation-factory-extractor-multiple-send-in-param.json @@ -0,0 +1,65 @@ +[ + { + "amount": "0", + "counter": "24122766", + "destination": "KT1U6EHmNxJTkvaWJ4ThczG4FSDaHC21ssvi", + "fee": "0", + "gas_limit": "1040000", + "kind": "transaction", + "parameters": { + "entrypoint": "transfer", + "value": [ + { + "args": [ + { + "string": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi" + }, + [ + { + "args": [ + { + "string": "tz1burnburnburnburnburnburnburjAYjjX" + }, + { + "args": [ + { + "int": "1445926" + }, + { + "int": "1" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + }, + { + "args": [ + { + "string": "tz1burnburnburnburnburnburnburjAYjjX" + }, + { + "args": [ + { + "int": "1545568" + }, + { + "int": "1" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ] + ], + "prim": "Pair" + } + ] + }, + "source": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi", + "storage_limit": "60000" + } +] \ No newline at end of file diff --git a/Tests/KukaiCoreSwiftTests/Stubs/simulate_operation-crunchy-stake-operations.json b/Tests/KukaiCoreSwiftTests/Stubs/simulate_operation-crunchy-stake-operations.json new file mode 100644 index 00000000..2f7e453e --- /dev/null +++ b/Tests/KukaiCoreSwiftTests/Stubs/simulate_operation-crunchy-stake-operations.json @@ -0,0 +1,95 @@ +[ + { + "amount": "0", + "counter": "24122610", + "destination": "KT1UQVEDf4twF2eMbrCKQAxN7YYunTAiCTTm", + "kind": "transaction", + "parameters": { + "entrypoint": "update_operators", + "value": [ + { + "args": [ + { + "args": [ + { + "string": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi" + }, + { + "args": [ + { + "string": "KT1L1WZgdsfjEyP5T4ZCYVvN5vgzrNbu18kX" + }, + { + "int": "0" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Left" + } + ] + }, + "source": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi" + }, + { + "amount": "0", + "counter": "24122611", + "destination": "KT1L1WZgdsfjEyP5T4ZCYVvN5vgzrNbu18kX", + "kind": "transaction", + "parameters": { + "entrypoint": "deposit", + "value": { + "args": [ + { + "int": "1004" + }, + { + "int": "1146068835831283" + } + ], + "prim": "Pair" + } + }, + "source": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi" + }, + { + "amount": "0", + "counter": "24122612", + "destination": "KT1UQVEDf4twF2eMbrCKQAxN7YYunTAiCTTm", + "kind": "transaction", + "parameters": { + "entrypoint": "update_operators", + "value": [ + { + "args": [ + { + "args": [ + { + "string": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi" + }, + { + "args": [ + { + "string": "KT1L1WZgdsfjEyP5T4ZCYVvN5vgzrNbu18kX" + }, + { + "int": "0" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Right" + } + ] + }, + "source": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi" + } +] \ No newline at end of file diff --git a/Tests/KukaiCoreSwiftTests/Stubs/simulate_operation-crunchy-stake-request.json b/Tests/KukaiCoreSwiftTests/Stubs/simulate_operation-crunchy-stake-request.json new file mode 100644 index 00000000..0962a023 --- /dev/null +++ b/Tests/KukaiCoreSwiftTests/Stubs/simulate_operation-crunchy-stake-request.json @@ -0,0 +1 @@ +{"chain_id":"NetXxkAx4woPLyu","operation":{"branch":"BLEDGNuADAwZfKK7iZ6PHnu7gZFSXuRPVFXe2PhSnb6aMyKn3mK","contents":[{"amount":"0","counter":"143231","destination":"KT1UQVEDf4twF2eMbrCKQAxN7YYunTAiCTTm","fee":"0","gas_limit":"2600000","kind":"transaction","parameters":{"entrypoint":"update_operators","value":[{"args":[{"args":[{"string":"tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi"},{"args":[{"string":"KT1L1WZgdsfjEyP5T4ZCYVvN5vgzrNbu18kX"},{"int":"0"}],"prim":"Pair"}],"prim":"Pair"}],"prim":"Left"}]},"source":"tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi","storage_limit":"60000"},{"amount":"0","counter":"143232","destination":"KT1L1WZgdsfjEyP5T4ZCYVvN5vgzrNbu18kX","fee":"0","gas_limit":"2600000","kind":"transaction","parameters":{"entrypoint":"deposit","value":{"args":[{"int":"1004"},{"int":"1146068835831283"}],"prim":"Pair"}},"source":"tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi","storage_limit":"60000"},{"amount":"0","counter":"143233","destination":"KT1UQVEDf4twF2eMbrCKQAxN7YYunTAiCTTm","fee":"0","gas_limit":"2600000","kind":"transaction","parameters":{"entrypoint":"update_operators","value":[{"args":[{"args":[{"string":"tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi"},{"args":[{"string":"KT1L1WZgdsfjEyP5T4ZCYVvN5vgzrNbu18kX"},{"int":"0"}],"prim":"Pair"}],"prim":"Pair"}],"prim":"Right"}]},"source":"tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi","storage_limit":"60000"}],"signature":"edsigtXomBKi5CTRf5cjATJWSyaRvhfYNHqSUGrn4SdbYRcGwQrUGjzEfQDTuqHhuA8b2d8NarZjz8TRf65WkpQmo423BtomS8Q"}} \ No newline at end of file diff --git a/Tests/KukaiCoreSwiftTests/Stubs/simulate_operation-crunchy-stake-response.json b/Tests/KukaiCoreSwiftTests/Stubs/simulate_operation-crunchy-stake-response.json new file mode 100644 index 00000000..b4673455 --- /dev/null +++ b/Tests/KukaiCoreSwiftTests/Stubs/simulate_operation-crunchy-stake-response.json @@ -0,0 +1,155 @@ +{ + "contents": [ + { + "amount": "0", + "destination": "KT1UQVEDf4twF2eMbrCKQAxN7YYunTAiCTTm", + "fee": "0", + "kind": "transaction", + "metadata": { + "operation_result": { + "status": "applied", + "consumed_milligas": "644461", + "storage_size": "234847" + }, + "internal_operation_results": [ + { + "result": { + "status": "applied", + "consumed_milligas": "100000" + }, + "kind": "event", + "source": "KT1UQVEDf4twF2eMbrCKQAxN7YYunTAiCTTm" + } + ] + }, + "source": "tz1Ue76bLW7boAcJEZf2kSGcamdBKVi4Kpss" + }, + { + "amount": "0", + "fee": "0", + "kind": "transaction", + "source": "tz1Ue76bLW7boAcJEZf2kSGcamdBKVi4Kpss", + "destination": "KT1L1WZgdsfjEyP5T4ZCYVvN5vgzrNbu18kX", + "metadata": { + "operation_result": { + "balance_updates": [ + { + "kind": "contract", + "contract": "tz1Ue76bLW7boAcJEZf2kSGcamdBKVi4Kpss", + "change": "-46000" + }, + { + "kind": "burned", + "change": "46000" + } + ], + "status": "applied", + "consumed_milligas": "3347616", + "storage_size": "71202", + "paid_storage_size_diff": "184" + }, + "internal_operation_results": [ + { + "result": { + "consumed_milligas": "1725096", + "storage_size": "234914", + "paid_storage_size_diff": "64", + "balance_updates": [ + { + "contract": "tz1Ue76bLW7boAcJEZf2kSGcamdBKVi4Kpss", + "kind": "contract", + "change": "-16000" + }, + { + "change": "16000", + "kind": "burned" + } + ], + "status": "applied" + }, + "source": "KT1L1WZgdsfjEyP5T4ZCYVvN5vgzrNbu18kX", + "kind": "transaction" + }, + { + "result": { + "consumed_milligas": "100000", + "status": "applied" + }, + "source": "KT1UQVEDf4twF2eMbrCKQAxN7YYunTAiCTTm", + "kind": "event" + }, + { + "kind": "event", + "source": "KT1UQVEDf4twF2eMbrCKQAxN7YYunTAiCTTm", + "result": { + "consumed_milligas": "100000", + "status": "applied" + } + }, + { + "kind": "event", + "result": { + "consumed_milligas": "100000", + "status": "applied" + }, + "source": "KT1UQVEDf4twF2eMbrCKQAxN7YYunTAiCTTm" + }, + { + "kind": "origination", + "result": { + "balance_updates": [ + { + "change": "-204750", + "contract": "tz1Ue76bLW7boAcJEZf2kSGcamdBKVi4Kpss", + "kind": "contract" + }, + { + "kind": "burned", + "change": "204750" + }, + { + "change": "-64250", + "kind": "contract", + "contract": "tz1Ue76bLW7boAcJEZf2kSGcamdBKVi4Kpss" + }, + { + "kind": "burned", + "change": "64250" + } + ], + "consumed_milligas": "588055", + "status": "applied", + "paid_storage_size_diff": "819", + "storage_size": "819" + }, + "source": "KT1L1WZgdsfjEyP5T4ZCYVvN5vgzrNbu18kX" + } + ] + } + }, + { + "amount": "0", + "metadata": { + "operation_result": { + "status": "applied", + "storage_size": "234847", + "consumed_milligas": "533338" + }, + "internal_operation_results": [ + { + "kind": "event", + "source": "KT1UQVEDf4twF2eMbrCKQAxN7YYunTAiCTTm", + "result": { + "consumed_milligas": "100000", + "status": "applied" + } + } + ] + }, + "kind": "transaction", + "source": "tz1Ue76bLW7boAcJEZf2kSGcamdBKVi4Kpss", + "fee": "0", + "destination": "KT1UQVEDf4twF2eMbrCKQAxN7YYunTAiCTTm" + } + ] +} \ No newline at end of file diff --git a/Tests/KukaiCoreSwiftTests/Stubs/simulate_operation-crunchy-swap-operations.json b/Tests/KukaiCoreSwiftTests/Stubs/simulate_operation-crunchy-swap-operations.json new file mode 100644 index 00000000..57574e5d --- /dev/null +++ b/Tests/KukaiCoreSwiftTests/Stubs/simulate_operation-crunchy-swap-operations.json @@ -0,0 +1,397 @@ +[ + { + "amount": "985211", + "counter": "24122610", + "destination": "KT1J8Hr3BP8bpbfmgGpRPoC9nAMSYtStZG43", + "kind": "transaction", + "parameters": { + "entrypoint": "swap", + "value": { + "args": [ + { + "prim": "None" + }, + { + "args": [ + [ + { + "args": [ + { + "args": [ + { + "prim": "Unit" + } + ], + "prim": "Right" + }, + { + "int": "1" + } + ], + "prim": "Pair" + } + ], + { + "args": [ + { + "string": "1707759306" + }, + { + "args": [ + { + "string": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi" + }, + { + "args": [ + { + "string": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi" + }, + { + "args": [ + { + "int": "985211" + }, + { + "args": [ + { + "int": "1034935187859866800" + }, + { + "prim": "None" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + }, + "source": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi", + }, + { + "amount": "0", + "counter": "24122611", + "destination": "KT1K9gCRgaLRFKTErYt1wVxA3Frb9FjasjTV", + "kind": "transaction", + "parameters": { + "entrypoint": "approve", + "value": { + "args": [ + { + "string": "KT1LgCejg1NhqZVaVu8y8cqC17DzYnn3wpZn" + }, + { + "int": "1034935187859866800" + } + ], + "prim": "Pair" + } + }, + "source": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi", + }, + { + "amount": "0", + "counter": "24122612", + "destination": "KT1LgCejg1NhqZVaVu8y8cqC17DzYnn3wpZn", + "kind": "transaction", + "parameters": { + "entrypoint": "Swap", + "value": { + "args": [ + { + "args": [ + { + "int": "847461" + }, + { + "string": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi" + } + ], + "prim": "Pair" + }, + { + "args": [ + { + "string": "KT1SjXiUX63QvdNMcM2m492f7kuf8JxXRLp4" + }, + { + "args": [ + { + "int": "0" + }, + { + "int": "1034935187859866800" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + }, + "source": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi", + }, + { + "amount": "0", + "counter": "24122613", + "destination": "KT1SjXiUX63QvdNMcM2m492f7kuf8JxXRLp4", + "kind": "transaction", + "parameters": { + "entrypoint": "approve", + "value": { + "args": [ + { + "string": "KT1A8rskLHZWB8b4WHUDiYFBZGL6ep6uk5Tt" + }, + { + "int": "847461" + } + ], + "prim": "Pair" + } + }, + "source": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi", + }, + { + "amount": "0", + "counter": "24122614", + "destination": "KT1A8rskLHZWB8b4WHUDiYFBZGL6ep6uk5Tt", + "kind": "transaction", + "parameters": { + "entrypoint": "Swap", + "value": { + "args": [ + { + "args": [ + { + "int": "1133247862403962" + }, + { + "string": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi" + } + ], + "prim": "Pair" + }, + { + "args": [ + { + "string": "KT1UQVEDf4twF2eMbrCKQAxN7YYunTAiCTTm" + }, + { + "args": [ + { + "int": "0" + }, + { + "int": "847461" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + }, + "source": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi", + }, + { + "amount": "13788", + "counter": "24122615", + "destination": "KT1VXBX6NwapYf9Sq6LsQVr4SdsDq3ta1nss", + "kind": "transaction", + "parameters": { + "entrypoint": "tezToTokenPayment", + "value": { + "args": [ + { + "int": "12298" + }, + { + "string": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi" + } + ], + "prim": "Pair" + } + }, + "source": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi", + }, + { + "amount": "0", + "counter": "24122616", + "destination": "KT1PnUZCp3u2KzWr93pn4DD7HAJnm3rWVrgn", + "kind": "transaction", + "parameters": { + "entrypoint": "update_operators", + "value": [ + { + "args": [ + { + "args": [ + { + "string": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi" + }, + { + "args": [ + { + "string": "KT1PwoZxyv4XkPEGnTqWYvjA1UYiPTgAGyqL" + }, + { + "int": "0" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Left" + } + ] + }, + "source": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi", + }, + { + "amount": "0", + "counter": "24122617", + "destination": "KT1PwoZxyv4XkPEGnTqWYvjA1UYiPTgAGyqL", + "kind": "transaction", + "parameters": { + "entrypoint": "swap_exact_for_tokens", + "value": { + "args": [ + { + "args": [ + { + "args": [ + { + "string": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi" + }, + { + "int": "12298" + } + ], + "prim": "Pair" + }, + { + "args": [ + { + "int": "15755818344143" + }, + { + "string": "1707759306" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + }, + { + "args": [ + { + "args": [ + { + "string": "KT1PnUZCp3u2KzWr93pn4DD7HAJnm3rWVrgn" + }, + { + "args": [ + { + "int": "0" + } + ], + "prim": "Some" + } + ], + "prim": "Pair" + }, + { + "args": [ + { + "string": "KT1UQVEDf4twF2eMbrCKQAxN7YYunTAiCTTm" + }, + { + "args": [ + { + "int": "0" + } + ], + "prim": "Some" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + }, + "source": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi", + }, + { + "amount": "0", + "counter": "24122618", + "destination": "KT1PnUZCp3u2KzWr93pn4DD7HAJnm3rWVrgn", + "kind": "transaction", + "parameters": { + "entrypoint": "update_operators", + "value": [ + { + "args": [ + { + "args": [ + { + "string": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi" + }, + { + "args": [ + { + "string": "KT1PwoZxyv4XkPEGnTqWYvjA1UYiPTgAGyqL" + }, + { + "int": "0" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Right" + } + ] + }, + "source": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi", + }, + { + "amount": "999", + "counter": "24122619", + "destination": "KT18bppNVxSqM2K7nhizA7dT5i4arekmSm6H", + "kind": "transaction", + "source": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi", + } +] \ No newline at end of file diff --git a/Tests/KukaiCoreSwiftTests/Stubs/simulate_operation-crunchy-swap-request.json b/Tests/KukaiCoreSwiftTests/Stubs/simulate_operation-crunchy-swap-request.json new file mode 100644 index 00000000..06d60a10 --- /dev/null +++ b/Tests/KukaiCoreSwiftTests/Stubs/simulate_operation-crunchy-swap-request.json @@ -0,0 +1 @@ +{"chain_id":"NetXxkAx4woPLyu","operation":{"branch":"BLEDGNuADAwZfKK7iZ6PHnu7gZFSXuRPVFXe2PhSnb6aMyKn3mK","contents":[{"amount":"985211","counter":"143231","destination":"KT1J8Hr3BP8bpbfmgGpRPoC9nAMSYtStZG43","fee":"0","gas_limit":"945454","kind":"transaction","parameters":{"entrypoint":"swap","value":{"args":[{"prim":"None"},{"args":[[{"args":[{"args":[{"prim":"Unit"}],"prim":"Right"},{"int":"1"}],"prim":"Pair"}],{"args":[{"string":"1707759306"},{"args":[{"string":"tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi"},{"args":[{"string":"tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi"},{"args":[{"int":"985211"},{"args":[{"int":"1034935187859866800"},{"prim":"None"}],"prim":"Pair"}],"prim":"Pair"}],"prim":"Pair"}],"prim":"Pair"}],"prim":"Pair"}],"prim":"Pair"}],"prim":"Pair"}},"source":"tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi","storage_limit":"60000"},{"amount":"0","counter":"143232","destination":"KT1K9gCRgaLRFKTErYt1wVxA3Frb9FjasjTV","fee":"0","gas_limit":"945454","kind":"transaction","parameters":{"entrypoint":"approve","value":{"args":[{"string":"KT1LgCejg1NhqZVaVu8y8cqC17DzYnn3wpZn"},{"int":"1034935187859866800"}],"prim":"Pair"}},"source":"tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi","storage_limit":"60000"},{"amount":"0","counter":"143233","destination":"KT1LgCejg1NhqZVaVu8y8cqC17DzYnn3wpZn","fee":"0","gas_limit":"945454","kind":"transaction","parameters":{"entrypoint":"Swap","value":{"args":[{"args":[{"int":"847461"},{"string":"tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi"}],"prim":"Pair"},{"args":[{"string":"KT1SjXiUX63QvdNMcM2m492f7kuf8JxXRLp4"},{"args":[{"int":"0"},{"int":"1034935187859866800"}],"prim":"Pair"}],"prim":"Pair"}],"prim":"Pair"}},"source":"tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi","storage_limit":"60000"},{"amount":"0","counter":"143234","destination":"KT1SjXiUX63QvdNMcM2m492f7kuf8JxXRLp4","fee":"0","gas_limit":"945454","kind":"transaction","parameters":{"entrypoint":"approve","value":{"args":[{"string":"KT1A8rskLHZWB8b4WHUDiYFBZGL6ep6uk5Tt"},{"int":"847461"}],"prim":"Pair"}},"source":"tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi","storage_limit":"60000"},{"amount":"0","counter":"143235","destination":"KT1A8rskLHZWB8b4WHUDiYFBZGL6ep6uk5Tt","fee":"0","gas_limit":"945454","kind":"transaction","parameters":{"entrypoint":"Swap","value":{"args":[{"args":[{"int":"1133247862403962"},{"string":"tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi"}],"prim":"Pair"},{"args":[{"string":"KT1UQVEDf4twF2eMbrCKQAxN7YYunTAiCTTm"},{"args":[{"int":"0"},{"int":"847461"}],"prim":"Pair"}],"prim":"Pair"}],"prim":"Pair"}},"source":"tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi","storage_limit":"60000"},{"amount":"13788","counter":"143236","destination":"KT1VXBX6NwapYf9Sq6LsQVr4SdsDq3ta1nss","fee":"0","gas_limit":"945454","kind":"transaction","parameters":{"entrypoint":"tezToTokenPayment","value":{"args":[{"int":"12298"},{"string":"tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi"}],"prim":"Pair"}},"source":"tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi","storage_limit":"60000"},{"amount":"0","counter":"143237","destination":"KT1PnUZCp3u2KzWr93pn4DD7HAJnm3rWVrgn","fee":"0","gas_limit":"945454","kind":"transaction","parameters":{"entrypoint":"update_operators","value":[{"args":[{"args":[{"string":"tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi"},{"args":[{"string":"KT1PwoZxyv4XkPEGnTqWYvjA1UYiPTgAGyqL"},{"int":"0"}],"prim":"Pair"}],"prim":"Pair"}],"prim":"Left"}]},"source":"tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi","storage_limit":"60000"},{"amount":"0","counter":"143238","destination":"KT1PwoZxyv4XkPEGnTqWYvjA1UYiPTgAGyqL","fee":"0","gas_limit":"945454","kind":"transaction","parameters":{"entrypoint":"swap_exact_for_tokens","value":{"args":[{"args":[{"args":[{"string":"tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi"},{"int":"12298"}],"prim":"Pair"},{"args":[{"int":"15755818344143"},{"string":"1707759306"}],"prim":"Pair"}],"prim":"Pair"},{"args":[{"args":[{"string":"KT1PnUZCp3u2KzWr93pn4DD7HAJnm3rWVrgn"},{"args":[{"int":"0"}],"prim":"Some"}],"prim":"Pair"},{"args":[{"string":"KT1UQVEDf4twF2eMbrCKQAxN7YYunTAiCTTm"},{"args":[{"int":"0"}],"prim":"Some"}],"prim":"Pair"}],"prim":"Pair"}],"prim":"Pair"}},"source":"tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi","storage_limit":"60000"},{"amount":"0","counter":"143239","destination":"KT1PnUZCp3u2KzWr93pn4DD7HAJnm3rWVrgn","fee":"0","gas_limit":"945454","kind":"transaction","parameters":{"entrypoint":"update_operators","value":[{"args":[{"args":[{"string":"tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi"},{"args":[{"string":"KT1PwoZxyv4XkPEGnTqWYvjA1UYiPTgAGyqL"},{"int":"0"}],"prim":"Pair"}],"prim":"Pair"}],"prim":"Right"}]},"source":"tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi","storage_limit":"60000"},{"amount":"999","counter":"143240","destination":"KT18bppNVxSqM2K7nhizA7dT5i4arekmSm6H","fee":"0","gas_limit":"945454","kind":"transaction","source":"tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi","storage_limit":"60000"}],"signature":"edsigtXomBKi5CTRf5cjATJWSyaRvhfYNHqSUGrn4SdbYRcGwQrUGjzEfQDTuqHhuA8b2d8NarZjz8TRf65WkpQmo423BtomS8Q"}} \ No newline at end of file diff --git a/Tests/KukaiCoreSwiftTests/Stubs/simulate_operation-crunchy-swap-response.json b/Tests/KukaiCoreSwiftTests/Stubs/simulate_operation-crunchy-swap-response.json new file mode 100644 index 00000000..701d0e92 --- /dev/null +++ b/Tests/KukaiCoreSwiftTests/Stubs/simulate_operation-crunchy-swap-response.json @@ -0,0 +1,735 @@ +{ + "contents": [ + { + "fee": "0", + "source": "tz1Ue76bLW7boAcJEZf2kSGcamdBKVi4Kpss", + "destination": "KT1J8Hr3BP8bpbfmgGpRPoC9nAMSYtStZG43", + "metadata": { + "internal_operation_results": [ + { + "kind": "transaction", + "source": "KT1J8Hr3BP8bpbfmgGpRPoC9nAMSYtStZG43", + "result": { + "storage_size": "1537265", + "status": "applied", + "consumed_milligas": "2900559" + } + }, + { + "kind": "transaction", + "source": "KT1J8Hr3BP8bpbfmgGpRPoC9nAMSYtStZG43", + "result": { + "balance_updates": [ + { + "contract": "KT1J8Hr3BP8bpbfmgGpRPoC9nAMSYtStZG43", + "change": "-985211", + "kind": "contract" + }, + { + "kind": "contract", + "contract": "KT1Q5ZGtACfTs7HBoo3HU3Qwj152zDgnzF9M", + "change": "985211" + } + ], + "consumed_milligas": "324706", + "storage_size": "37427", + "status": "applied" + } + }, + { + "kind": "transaction", + "source": "KT1J8Hr3BP8bpbfmgGpRPoC9nAMSYtStZG43", + "result": { + "status": "applied", + "storage_size": "587144", + "consumed_milligas": "1021143" + } + } + ], + "operation_result": { + "paid_storage_size_diff": "47", + "consumed_milligas": "8736781", + "balance_updates": [ + { + "change": "-11750", + "kind": "contract", + "contract": "tz1Ue76bLW7boAcJEZf2kSGcamdBKVi4Kpss" + }, + { + "kind": "burned", + "change": "11750" + }, + { + "change": "-985211", + "contract": "tz1Ue76bLW7boAcJEZf2kSGcamdBKVi4Kpss", + "kind": "contract" + }, + { + "kind": "contract", + "change": "985211", + "contract": "KT1J8Hr3BP8bpbfmgGpRPoC9nAMSYtStZG43" + } + ], + "storage_size": "587144", + "status": "applied" + } + }, + "kind": "transaction", + "amount": "985211" + }, + { + "amount": "0", + "fee": "0", + "kind": "transaction", + "metadata": { + "operation_result": { + "status": "applied", + "balance_updates": [ + { + "kind": "contract", + "change": "-7500", + "contract": "tz1Ue76bLW7boAcJEZf2kSGcamdBKVi4Kpss" + }, + { + "change": "7500", + "kind": "burned" + } + ], + "paid_storage_size_diff": "30", + "consumed_milligas": "1525304", + "storage_size": "1537304" + } + }, + "destination": "KT1K9gCRgaLRFKTErYt1wVxA3Frb9FjasjTV", + "source": "tz1Ue76bLW7boAcJEZf2kSGcamdBKVi4Kpss" + }, + { + "amount": "0", + "fee": "0", + "metadata": { + "operation_result": { + "storage_size": "10988", + "consumed_milligas": "4893922", + "status": "applied" + }, + "internal_operation_results": [ + { + "source": "KT1LgCejg1NhqZVaVu8y8cqC17DzYnn3wpZn", + "result": { + "consumed_milligas": "3387241", + "storage_size": "1537296", + "status": "applied" + }, + "kind": "transaction" + }, + { + "result": { + "status": "applied", + "storage_size": "902752", + "consumed_milligas": "1702068" + }, + "kind": "transaction", + "source": "KT1LgCejg1NhqZVaVu8y8cqC17DzYnn3wpZn" + } + ] + }, + "destination": "KT1LgCejg1NhqZVaVu8y8cqC17DzYnn3wpZn", + "source": "tz1Ue76bLW7boAcJEZf2kSGcamdBKVi4Kpss", + "kind": "transaction" + }, + { + "kind": "transaction", + "metadata": { + "operation_result": { + "status": "applied", + "consumed_milligas": "784851", + "storage_size": "902821" + } + }, + "source": "tz1Ue76bLW7boAcJEZf2kSGcamdBKVi4Kpss", + "destination": "KT1SjXiUX63QvdNMcM2m492f7kuf8JxXRLp4", + "amount": "0", + "fee": "0" + }, + { + "destination": "KT1A8rskLHZWB8b4WHUDiYFBZGL6ep6uk5Tt", + "source": "tz1Ue76bLW7boAcJEZf2kSGcamdBKVi4Kpss", + "metadata": { + "internal_operation_results": [ + { + "source": "KT1A8rskLHZWB8b4WHUDiYFBZGL6ep6uk5Tt", + "result": { + "status": "applied", + "consumed_milligas": "2367811", + "storage_size": "902752" + }, + "kind": "transaction" + }, + { + "source": "KT1A8rskLHZWB8b4WHUDiYFBZGL6ep6uk5Tt", + "result": { + "storage_size": "234574", + "status": "applied", + "consumed_milligas": "4575922" + }, + "kind": "transaction" + }, + { + "kind": "event", + "result": { + "status": "applied", + "consumed_milligas": "100000" + }, + "source": "KT1UQVEDf4twF2eMbrCKQAxN7YYunTAiCTTm" + }, + { + "result": { + "status": "applied", + "consumed_milligas": "100000" + }, + "source": "KT1UQVEDf4twF2eMbrCKQAxN7YYunTAiCTTm", + "kind": "event" + }, + { + "kind": "event", + "result": { + "consumed_milligas": "100000", + "status": "applied" + }, + "source": "KT1UQVEDf4twF2eMbrCKQAxN7YYunTAiCTTm" + } + ], + "operation_result": { + "storage_size": "10985", + "consumed_milligas": "4967148", + "status": "applied" + } + }, + "amount": "0", + "fee": "0", + "kind": "transaction" + }, + { + "fee": "0", + "kind": "transaction", + "metadata": { + "internal_operation_results": [ + { + "result": { + "status": "applied", + "consumed_milligas": "1943088", + "storage_size": "391067" + }, + "kind": "transaction", + "source": "KT1VXBX6NwapYf9Sq6LsQVr4SdsDq3ta1nss" + } + ], + "operation_result": { + "storage_size": "35251", + "balance_updates": [ + { + "contract": "tz1Ue76bLW7boAcJEZf2kSGcamdBKVi4Kpss", + "change": "-13788", + "kind": "contract" + }, + { + "kind": "contract", + "contract": "KT1VXBX6NwapYf9Sq6LsQVr4SdsDq3ta1nss", + "change": "13788" + } + ], + "consumed_milligas": "1856570", + "status": "applied" + } + }, + "source": "tz1Ue76bLW7boAcJEZf2kSGcamdBKVi4Kpss", + "destination": "KT1VXBX6NwapYf9Sq6LsQVr4SdsDq3ta1nss", + "amount": "13788" + }, + { + "source": "tz1Ue76bLW7boAcJEZf2kSGcamdBKVi4Kpss", + "kind": "transaction", + "metadata": { + "operation_result": { + "status": "applied", + "storage_size": "391134", + "consumed_milligas": "563567" + } + }, + "amount": "0", + "fee": "0", + "destination": "KT1PnUZCp3u2KzWr93pn4DD7HAJnm3rWVrgn" + }, + { + "fee": "0", + "metadata": { + "operation_result": { + "status": "applied", + "consumed_milligas": "3087050", + "storage_size": "64611" + }, + "internal_operation_results": [ + { + "kind": "transaction", + "result": { + "status": "applied", + "consumed_milligas": "6828997", + "storage_size": "27656" + }, + "source": "KT1PwoZxyv4XkPEGnTqWYvjA1UYiPTgAGyqL" + }, + { + "kind": "transaction", + "source": "KT1HHZnspZoRZgtFns5LHYHFkXgQ1WGPrxFr", + "result": { + "storage_size": "64636", + "consumed_milligas": "819128", + "status": "applied" + } + }, + { + "source": "KT1PwoZxyv4XkPEGnTqWYvjA1UYiPTgAGyqL", + "kind": "transaction", + "result": { + "consumed_milligas": "2207900", + "status": "applied", + "storage_size": "64468" + } + }, + { + "source": "KT1PwoZxyv4XkPEGnTqWYvjA1UYiPTgAGyqL", + "result": { + "status": "applied", + "consumed_milligas": "1943112", + "storage_size": "391132" + }, + "kind": "transaction" + }, + { + "result": { + "status": "applied", + "consumed_milligas": "7198160", + "storage_size": "27711" + }, + "kind": "transaction", + "source": "KT1PwoZxyv4XkPEGnTqWYvjA1UYiPTgAGyqL" + }, + { + "result": { + "consumed_milligas": "1957715", + "status": "applied", + "storage_size": "234574" + }, + "source": "KT1HHZnspZoRZgtFns5LHYHFkXgQ1WGPrxFr", + "kind": "transaction" + }, + { + "source": "KT1UQVEDf4twF2eMbrCKQAxN7YYunTAiCTTm", + "kind": "event", + "result": { + "status": "applied", + "consumed_milligas": "100000" + } + }, + { + "result": { + "status": "applied", + "consumed_milligas": "100000" + }, + "source": "KT1UQVEDf4twF2eMbrCKQAxN7YYunTAiCTTm", + "kind": "event" + }, + { + "source": "KT1UQVEDf4twF2eMbrCKQAxN7YYunTAiCTTm", + "kind": "event", + "result": { + "consumed_milligas": "100000", + "status": "applied" + } + }, + { + "kind": "transaction", + "source": "KT1HHZnspZoRZgtFns5LHYHFkXgQ1WGPrxFr", + "result": { + "consumed_milligas": "783748", + "storage_size": "391132", + "status": "applied" + } + }, + { + "source": "KT1PnUZCp3u2KzWr93pn4DD7HAJnm3rWVrgn", + "kind": "transaction", + "result": { + "consumed_milligas": "340540", + "storage_size": "27719", + "status": "applied" + } + }, + { + "source": "KT1HHZnspZoRZgtFns5LHYHFkXgQ1WGPrxFr", + "result": { + "status": "applied", + "consumed_milligas": "781357", + "storage_size": "234574" + }, + "kind": "transaction" + }, + { + "kind": "transaction", + "result": { + "status": "applied", + "consumed_milligas": "341146", + "storage_size": "27730" + }, + "source": "KT1UQVEDf4twF2eMbrCKQAxN7YYunTAiCTTm" + }, + { + "kind": "transaction", + "source": "KT1HHZnspZoRZgtFns5LHYHFkXgQ1WGPrxFr", + "result": { + "status": "applied", + "storage_size": "27656", + "consumed_milligas": "4637550" + } + } + ] + }, + "amount": "0", + "kind": "transaction", + "source": "tz1Ue76bLW7boAcJEZf2kSGcamdBKVi4Kpss", + "destination": "KT1PwoZxyv4XkPEGnTqWYvjA1UYiPTgAGyqL" + }, + { + "kind": "transaction", + "amount": "0", + "metadata": { + "operation_result": { + "storage_size": "391065", + "status": "applied", + "consumed_milligas": "533335" + } + }, + "source": "tz1Ue76bLW7boAcJEZf2kSGcamdBKVi4Kpss", + "fee": "0", + "destination": "KT1PnUZCp3u2KzWr93pn4DD7HAJnm3rWVrgn" + }, + { + "metadata": { + "internal_operation_results": [ + { + "kind": "transaction", + "result": { + "balance_updates": [ + { + "change": "-334", + "contract": "KT18bppNVxSqM2K7nhizA7dT5i4arekmSm6H", + "kind": "contract" + }, + { + "change": "334", + "kind": "contract", + "contract": "tz1KhF8F19J94sKjSZjFGNRgnd65Yawqvsr6" + } + ], + "consumed_milligas": "100000", + "status": "applied" + }, + "source": "KT18bppNVxSqM2K7nhizA7dT5i4arekmSm6H" + }, + { + "kind": "transaction", + "source": "KT18bppNVxSqM2K7nhizA7dT5i4arekmSm6H", + "result": { + "balance_updates": [ + { + "kind": "contract", + "contract": "KT18bppNVxSqM2K7nhizA7dT5i4arekmSm6H", + "change": "-333" + }, + { + "contract": "KT1WkAAXRWioqfFCW9Wij3rM5qs3CvMqVVDg", + "change": "333", + "kind": "contract" + } + ], + "status": "applied", + "storage_size": "33563", + "consumed_milligas": "3688879" + } + }, + { + "kind": "transaction", + "result": { + "consumed_milligas": "783748", + "storage_size": "391065", + "status": "applied" + }, + "source": "KT1WkAAXRWioqfFCW9Wij3rM5qs3CvMqVVDg" + }, + { + "result": { + "status": "applied", + "storage_size": "33567", + "consumed_milligas": "407758" + }, + "kind": "transaction", + "source": "KT1PnUZCp3u2KzWr93pn4DD7HAJnm3rWVrgn" + }, + { + "result": { + "consumed_milligas": "1014732", + "balance_updates": [ + { + "change": "-333", + "kind": "contract", + "contract": "KT1WkAAXRWioqfFCW9Wij3rM5qs3CvMqVVDg" + }, + { + "kind": "contract", + "change": "333", + "contract": "KT1SJPWa6g8CFGBhLk8aMnQZuFNFts1zTHvV" + } + ], + "status": "applied", + "storage_size": "1540" + }, + "kind": "transaction", + "source": "KT1WkAAXRWioqfFCW9Wij3rM5qs3CvMqVVDg" + }, + { + "result": { + "balance_updates": [ + { + "contract": "KT1SJPWa6g8CFGBhLk8aMnQZuFNFts1zTHvV", + "change": "-333", + "kind": "contract" + }, + { + "contract": "KT1LLZ5aFCwryDZs5vTEaYvKe37pmHLEXbiW", + "kind": "contract", + "change": "333" + } + ], + "status": "applied", + "consumed_milligas": "3333845", + "storage_size": "6907" + }, + "kind": "transaction", + "source": "KT1SJPWa6g8CFGBhLk8aMnQZuFNFts1zTHvV" + }, + { + "result": { + "consumed_milligas": "304361", + "storage_size": "727", + "balance_updates": [ + { + "kind": "contract", + "change": "-66", + "contract": "KT1LLZ5aFCwryDZs5vTEaYvKe37pmHLEXbiW" + }, + { + "kind": "contract", + "contract": "KT1NGTDBKDPMrAYEufb72CLwuQJ7jU7jL6jD", + "change": "66" + } + ], + "status": "applied" + }, + "kind": "transaction", + "source": "KT1LLZ5aFCwryDZs5vTEaYvKe37pmHLEXbiW" + }, + { + "source": "KT1LLZ5aFCwryDZs5vTEaYvKe37pmHLEXbiW", + "result": { + "status": "applied", + "consumed_milligas": "304361", + "balance_updates": [ + { + "kind": "contract", + "change": "-66", + "contract": "KT1LLZ5aFCwryDZs5vTEaYvKe37pmHLEXbiW" + }, + { + "contract": "KT1NBgqqJacbdoeNAg9MvrgPT9h6q6AGWvFA", + "kind": "contract", + "change": "66" + } + ], + "storage_size": "727" + }, + "kind": "transaction" + }, + { + "source": "KT1LLZ5aFCwryDZs5vTEaYvKe37pmHLEXbiW", + "result": { + "consumed_milligas": "304361", + "status": "applied", + "storage_size": "727", + "balance_updates": [ + { + "contract": "KT1LLZ5aFCwryDZs5vTEaYvKe37pmHLEXbiW", + "kind": "contract", + "change": "-67" + }, + { + "kind": "contract", + "contract": "KT1LpGZnT6dj6STSxHXmvSPqx39ZdPXAMpFz", + "change": "67" + } + ] + }, + "kind": "transaction" + }, + { + "result": { + "status": "applied", + "consumed_milligas": "304361", + "storage_size": "727", + "balance_updates": [ + { + "contract": "KT1LLZ5aFCwryDZs5vTEaYvKe37pmHLEXbiW", + "change": "-67", + "kind": "contract" + }, + { + "kind": "contract", + "contract": "KT1H25LW5k4HQGm9hmNXzaxf3nqjsAEhQPah", + "change": "67" + } + ] + }, + "kind": "transaction", + "source": "KT1LLZ5aFCwryDZs5vTEaYvKe37pmHLEXbiW" + }, + { + "kind": "transaction", + "result": { + "balance_updates": [ + { + "contract": "KT1LLZ5aFCwryDZs5vTEaYvKe37pmHLEXbiW", + "change": "-67", + "kind": "contract" + }, + { + "kind": "contract", + "contract": "KT1BB3oNr5vUSw1CuPNb2zpYEVp376XrXWaJ", + "change": "67" + } + ], + "consumed_milligas": "304361", + "storage_size": "727", + "status": "applied" + }, + "source": "KT1LLZ5aFCwryDZs5vTEaYvKe37pmHLEXbiW" + }, + { + "result": { + "storage_size": "391065", + "status": "applied", + "consumed_milligas": "1707542" + }, + "kind": "transaction", + "source": "KT1LLZ5aFCwryDZs5vTEaYvKe37pmHLEXbiW" + }, + { + "kind": "transaction", + "source": "KT1WkAAXRWioqfFCW9Wij3rM5qs3CvMqVVDg", + "result": { + "storage_size": "391065", + "status": "applied", + "consumed_milligas": "783748" + } + }, + { + "source": "KT1PnUZCp3u2KzWr93pn4DD7HAJnm3rWVrgn", + "kind": "transaction", + "result": { + "status": "applied", + "storage_size": "33563", + "consumed_milligas": "1509129" + } + }, + { + "kind": "transaction", + "result": { + "storage_size": "33563", + "status": "applied", + "consumed_milligas": "1111154" + }, + "source": "KT1WkAAXRWioqfFCW9Wij3rM5qs3CvMqVVDg" + }, + { + "source": "KT18bppNVxSqM2K7nhizA7dT5i4arekmSm6H", + "kind": "transaction", + "result": { + "balance_updates": [ + { + "contract": "KT18bppNVxSqM2K7nhizA7dT5i4arekmSm6H", + "change": "-332", + "kind": "contract" + }, + { + "change": "332", + "kind": "contract", + "contract": "KT1KrhWvNabCZXNkBgxyxz3RG2MX1MVabwRd" + } + ], + "consumed_milligas": "1846379", + "status": "applied", + "storage_size": "35051" + } + }, + { + "kind": "transaction", + "source": "KT1KrhWvNabCZXNkBgxyxz3RG2MX1MVabwRd", + "result": { + "status": "applied", + "storage_size": "164584", + "consumed_milligas": "1939731" + } + }, + { + "source": "KT18bppNVxSqM2K7nhizA7dT5i4arekmSm6H", + "result": { + "consumed_milligas": "3622046", + "storage_size": "2967", + "status": "applied" + }, + "kind": "transaction" + }, + { + "source": "KT18bppNVxSqM2K7nhizA7dT5i4arekmSm6H", + "result": { + "status": "applied", + "consumed_milligas": "1936854", + "storage_size": "164581" + }, + "kind": "transaction" + } + ], + "operation_result": { + "balance_updates": [ + { + "kind": "contract", + "contract": "tz1Ue76bLW7boAcJEZf2kSGcamdBKVi4Kpss", + "change": "-999" + }, + { + "contract": "KT18bppNVxSqM2K7nhizA7dT5i4arekmSm6H", + "change": "999", + "kind": "contract" + } + ], + "storage_size": "2967", + "status": "applied", + "consumed_milligas": "2681499" + } + }, + "kind": "transaction", + "fee": "0", + "destination": "KT18bppNVxSqM2K7nhizA7dT5i4arekmSm6H", + "amount": "999", + "source": "tz1Ue76bLW7boAcJEZf2kSGcamdBKVi4Kpss" + } + ] +} \ No newline at end of file diff --git a/Tests/KukaiCoreSwiftTests/Stubs/simulate_operation-high-gas-low-storage-operations.json b/Tests/KukaiCoreSwiftTests/Stubs/simulate_operation-high-gas-low-storage-operations.json new file mode 100644 index 00000000..ad5fdfc3 --- /dev/null +++ b/Tests/KukaiCoreSwiftTests/Stubs/simulate_operation-high-gas-low-storage-operations.json @@ -0,0 +1,538 @@ +[ + { + "amount": "0", + "source": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi", + "storage_limit": "350", + "parameters": { + "entrypoint": "update_operators", + "value": [ + { + "prim": "Left", + "args": [ + { + "args": [ + { + "string": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi" + }, + { + "args": [ + { + "string": "KT1WvV2rPBQUFUqtCWmnnj8JX2gkmDtMBzQi" + }, + { + "int": "156" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ] + }, + { + "args": [ + { + "prim": "Pair", + "args": [ + { + "string": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi" + }, + { + "prim": "Pair", + "args": [ + { + "string": "KT1WvV2rPBQUFUqtCWmnnj8JX2gkmDtMBzQi" + }, + { + "int": "157" + } + ] + } + ] + } + ], + "prim": "Left" + }, + { + "prim": "Left", + "args": [ + { + "prim": "Pair", + "args": [ + { + "string": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi" + }, + { + "args": [ + { + "string": "KT1WvV2rPBQUFUqtCWmnnj8JX2gkmDtMBzQi" + }, + { + "int": "158" + } + ], + "prim": "Pair" + } + ] + } + ] + }, + { + "args": [ + { + "args": [ + { + "string": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi" + }, + { + "prim": "Pair", + "args": [ + { + "string": "KT1WvV2rPBQUFUqtCWmnnj8JX2gkmDtMBzQi" + }, + { + "int": "159" + } + ] + } + ], + "prim": "Pair" + } + ], + "prim": "Left" + }, + { + "prim": "Left", + "args": [ + { + "args": [ + { + "string": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi" + }, + { + "args": [ + { + "string": "KT1WvV2rPBQUFUqtCWmnnj8JX2gkmDtMBzQi" + }, + { + "int": "160" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ] + }, + { + "prim": "Left", + "args": [ + { + "args": [ + { + "string": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi" + }, + { + "prim": "Pair", + "args": [ + { + "string": "KT1WvV2rPBQUFUqtCWmnnj8JX2gkmDtMBzQi" + }, + { + "int": "161" + } + ] + } + ], + "prim": "Pair" + } + ] + }, + { + "args": [ + { + "prim": "Pair", + "args": [ + { + "string": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi" + }, + { + "prim": "Pair", + "args": [ + { + "string": "KT1WvV2rPBQUFUqtCWmnnj8JX2gkmDtMBzQi" + }, + { + "int": "162" + } + ] + } + ] + } + ], + "prim": "Left" + } + ] + }, + "fee": "0", + "counter": null, + "gas_limit": "16000", + "kind": "transaction", + "destination": "KT1CzVSa18hndYupV9NcXy3Qj7p8YFDZKVQv" + }, + { + "destination": "KT1WvV2rPBQUFUqtCWmnnj8JX2gkmDtMBzQi", + "source": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi", + "counter": null, + "fee": "0", + "parameters": { + "value": { + "prim": "Pair", + "args": [ + { + "string": "sigiNx86DL1pMLs5fakRRWhR1SH4MKuQJGM2E2FajcbyraXTNPhBmpQJVFW69tUPFG1VwZbdaVRWo6BhSVmdZk8xQqR3kbvR" + }, + { + "prim": "Pair", + "args": [ + { + "int": "0" + }, + { + "prim": "Pair", + "args": [ + { + "int": "505" + }, + { + "prim": "Pair", + "args": [ + [ + { + "args": [ + { + "string": "KT1CzVSa18hndYupV9NcXy3Qj7p8YFDZKVQv" + }, + [ + { + "prim": "Pair", + "args": [ + { + "int": "156" + }, + { + "int": "1" + } + ] + }, + { + "args": [ + { + "int": "157" + }, + { + "int": "1" + } + ], + "prim": "Pair" + }, + { + "prim": "Pair", + "args": [ + { + "int": "158" + }, + { + "int": "1" + } + ] + }, + { + "args": [ + { + "int": "159" + }, + { + "int": "1" + } + ], + "prim": "Pair" + }, + { + "prim": "Pair", + "args": [ + { + "int": "160" + }, + { + "int": "1" + } + ] + }, + { + "prim": "Pair", + "args": [ + { + "int": "161" + }, + { + "int": "1" + } + ] + }, + { + "prim": "Pair", + "args": [ + { + "int": "162" + }, + { + "int": "1" + } + ] + } + ] + ], + "prim": "Elt" + } + ], + { + "args": [ + [ + { + "args": [ + { + "string": "KT1CzVSa18hndYupV9NcXy3Qj7p8YFDZKVQv" + }, + [] + ], + "prim": "Elt" + } + ], + [ + { + "prim": "Elt", + "args": [ + { + "string": "KT1CzVSa18hndYupV9NcXy3Qj7p8YFDZKVQv" + }, + [ + { + "prim": "Pair", + "args": [ + { + "int": "198" + }, + { + "int": "1" + } + ] + } + ] + ] + } + ] + ], + "prim": "Pair" + } + ] + } + ] + } + ] + } + ] + }, + "entrypoint": "claim" + }, + "gas_limit": "32000", + "storage_limit": "300", + "amount": "0", + "kind": "transaction" + }, + { + "gas_limit": "12000", + "parameters": { + "value": [ + { + "args": [ + { + "args": [ + { + "string": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi" + }, + { + "args": [ + { + "string": "KT1WvV2rPBQUFUqtCWmnnj8JX2gkmDtMBzQi" + }, + { + "int": "156" + } + ], + "prim": "Pair" + } + ], + "prim": "Pair" + } + ], + "prim": "Right" + }, + { + "prim": "Right", + "args": [ + { + "prim": "Pair", + "args": [ + { + "string": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi" + }, + { + "prim": "Pair", + "args": [ + { + "string": "KT1WvV2rPBQUFUqtCWmnnj8JX2gkmDtMBzQi" + }, + { + "int": "157" + } + ] + } + ] + } + ] + }, + { + "prim": "Right", + "args": [ + { + "prim": "Pair", + "args": [ + { + "string": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi" + }, + { + "prim": "Pair", + "args": [ + { + "string": "KT1WvV2rPBQUFUqtCWmnnj8JX2gkmDtMBzQi" + }, + { + "int": "158" + } + ] + } + ] + } + ] + }, + { + "prim": "Right", + "args": [ + { + "prim": "Pair", + "args": [ + { + "string": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi" + }, + { + "prim": "Pair", + "args": [ + { + "string": "KT1WvV2rPBQUFUqtCWmnnj8JX2gkmDtMBzQi" + }, + { + "int": "159" + } + ] + } + ] + } + ] + }, + { + "prim": "Right", + "args": [ + { + "prim": "Pair", + "args": [ + { + "string": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi" + }, + { + "prim": "Pair", + "args": [ + { + "string": "KT1WvV2rPBQUFUqtCWmnnj8JX2gkmDtMBzQi" + }, + { + "int": "160" + } + ] + } + ] + } + ] + }, + { + "prim": "Right", + "args": [ + { + "prim": "Pair", + "args": [ + { + "string": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi" + }, + { + "args": [ + { + "string": "KT1WvV2rPBQUFUqtCWmnnj8JX2gkmDtMBzQi" + }, + { + "int": "161" + } + ], + "prim": "Pair" + } + ] + } + ] + }, + { + "args": [ + { + "prim": "Pair", + "args": [ + { + "string": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi" + }, + { + "prim": "Pair", + "args": [ + { + "string": "KT1WvV2rPBQUFUqtCWmnnj8JX2gkmDtMBzQi" + }, + { + "int": "162" + } + ] + } + ] + } + ], + "prim": "Right" + } + ], + "entrypoint": "update_operators" + }, + "destination": "KT1CzVSa18hndYupV9NcXy3Qj7p8YFDZKVQv", + "kind": "transaction", + "source": "tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi", + "amount": "0", + "fee": "0", + "storage_limit": "0", + "counter": null + } +] \ No newline at end of file diff --git a/Tests/KukaiCoreSwiftTests/Stubs/simulate_operation-high-gas-low-storage-request.json b/Tests/KukaiCoreSwiftTests/Stubs/simulate_operation-high-gas-low-storage-request.json new file mode 100644 index 00000000..5e465c9d --- /dev/null +++ b/Tests/KukaiCoreSwiftTests/Stubs/simulate_operation-high-gas-low-storage-request.json @@ -0,0 +1 @@ +{"chain_id":"NetXxkAx4woPLyu","operation":{"branch":"BLEDGNuADAwZfKK7iZ6PHnu7gZFSXuRPVFXe2PhSnb6aMyKn3mK","contents":[{"amount":"0","counter":"143231","destination":"KT1CzVSa18hndYupV9NcXy3Qj7p8YFDZKVQv","fee":"0","gas_limit":"2600000","kind":"transaction","parameters":{"entrypoint":"update_operators","value":[{"args":[{"args":[{"string":"tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi"},{"args":[{"string":"KT1WvV2rPBQUFUqtCWmnnj8JX2gkmDtMBzQi"},{"int":"156"}],"prim":"Pair"}],"prim":"Pair"}],"prim":"Left"},{"args":[{"args":[{"string":"tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi"},{"args":[{"string":"KT1WvV2rPBQUFUqtCWmnnj8JX2gkmDtMBzQi"},{"int":"157"}],"prim":"Pair"}],"prim":"Pair"}],"prim":"Left"},{"args":[{"args":[{"string":"tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi"},{"args":[{"string":"KT1WvV2rPBQUFUqtCWmnnj8JX2gkmDtMBzQi"},{"int":"158"}],"prim":"Pair"}],"prim":"Pair"}],"prim":"Left"},{"args":[{"args":[{"string":"tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi"},{"args":[{"string":"KT1WvV2rPBQUFUqtCWmnnj8JX2gkmDtMBzQi"},{"int":"159"}],"prim":"Pair"}],"prim":"Pair"}],"prim":"Left"},{"args":[{"args":[{"string":"tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi"},{"args":[{"string":"KT1WvV2rPBQUFUqtCWmnnj8JX2gkmDtMBzQi"},{"int":"160"}],"prim":"Pair"}],"prim":"Pair"}],"prim":"Left"},{"args":[{"args":[{"string":"tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi"},{"args":[{"string":"KT1WvV2rPBQUFUqtCWmnnj8JX2gkmDtMBzQi"},{"int":"161"}],"prim":"Pair"}],"prim":"Pair"}],"prim":"Left"},{"args":[{"args":[{"string":"tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi"},{"args":[{"string":"KT1WvV2rPBQUFUqtCWmnnj8JX2gkmDtMBzQi"},{"int":"162"}],"prim":"Pair"}],"prim":"Pair"}],"prim":"Left"}]},"source":"tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi","storage_limit":"60000"},{"amount":"0","counter":"143232","destination":"KT1WvV2rPBQUFUqtCWmnnj8JX2gkmDtMBzQi","fee":"0","gas_limit":"2600000","kind":"transaction","parameters":{"entrypoint":"claim","value":{"args":[{"string":"sigiNx86DL1pMLs5fakRRWhR1SH4MKuQJGM2E2FajcbyraXTNPhBmpQJVFW69tUPFG1VwZbdaVRWo6BhSVmdZk8xQqR3kbvR"},{"args":[{"int":"0"},{"args":[{"int":"505"},{"args":[[{"args":[{"string":"KT1CzVSa18hndYupV9NcXy3Qj7p8YFDZKVQv"},[{"args":[{"int":"156"},{"int":"1"}],"prim":"Pair"},{"args":[{"int":"157"},{"int":"1"}],"prim":"Pair"},{"args":[{"int":"158"},{"int":"1"}],"prim":"Pair"},{"args":[{"int":"159"},{"int":"1"}],"prim":"Pair"},{"args":[{"int":"160"},{"int":"1"}],"prim":"Pair"},{"args":[{"int":"161"},{"int":"1"}],"prim":"Pair"},{"args":[{"int":"162"},{"int":"1"}],"prim":"Pair"}]],"prim":"Elt"}],{"args":[[{"args":[{"string":"KT1CzVSa18hndYupV9NcXy3Qj7p8YFDZKVQv"},[]],"prim":"Elt"}],[{"args":[{"string":"KT1CzVSa18hndYupV9NcXy3Qj7p8YFDZKVQv"},[{"args":[{"int":"198"},{"int":"1"}],"prim":"Pair"}]],"prim":"Elt"}]],"prim":"Pair"}],"prim":"Pair"}],"prim":"Pair"}],"prim":"Pair"}],"prim":"Pair"}},"source":"tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi","storage_limit":"60000"},{"amount":"0","counter":"143233","destination":"KT1CzVSa18hndYupV9NcXy3Qj7p8YFDZKVQv","fee":"0","gas_limit":"2600000","kind":"transaction","parameters":{"entrypoint":"update_operators","value":[{"args":[{"args":[{"string":"tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi"},{"args":[{"string":"KT1WvV2rPBQUFUqtCWmnnj8JX2gkmDtMBzQi"},{"int":"156"}],"prim":"Pair"}],"prim":"Pair"}],"prim":"Right"},{"args":[{"args":[{"string":"tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi"},{"args":[{"string":"KT1WvV2rPBQUFUqtCWmnnj8JX2gkmDtMBzQi"},{"int":"157"}],"prim":"Pair"}],"prim":"Pair"}],"prim":"Right"},{"args":[{"args":[{"string":"tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi"},{"args":[{"string":"KT1WvV2rPBQUFUqtCWmnnj8JX2gkmDtMBzQi"},{"int":"158"}],"prim":"Pair"}],"prim":"Pair"}],"prim":"Right"},{"args":[{"args":[{"string":"tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi"},{"args":[{"string":"KT1WvV2rPBQUFUqtCWmnnj8JX2gkmDtMBzQi"},{"int":"159"}],"prim":"Pair"}],"prim":"Pair"}],"prim":"Right"},{"args":[{"args":[{"string":"tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi"},{"args":[{"string":"KT1WvV2rPBQUFUqtCWmnnj8JX2gkmDtMBzQi"},{"int":"160"}],"prim":"Pair"}],"prim":"Pair"}],"prim":"Right"},{"args":[{"args":[{"string":"tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi"},{"args":[{"string":"KT1WvV2rPBQUFUqtCWmnnj8JX2gkmDtMBzQi"},{"int":"161"}],"prim":"Pair"}],"prim":"Pair"}],"prim":"Right"},{"args":[{"args":[{"string":"tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi"},{"args":[{"string":"KT1WvV2rPBQUFUqtCWmnnj8JX2gkmDtMBzQi"},{"int":"162"}],"prim":"Pair"}],"prim":"Pair"}],"prim":"Right"}]},"source":"tz1Nzj8BKu3F6KhyaJYZXEfXkyN51HBNJixi","storage_limit":"60000"}],"signature":"edsigtXomBKi5CTRf5cjATJWSyaRvhfYNHqSUGrn4SdbYRcGwQrUGjzEfQDTuqHhuA8b2d8NarZjz8TRf65WkpQmo423BtomS8Q"}} \ No newline at end of file diff --git a/Tests/KukaiCoreSwiftTests/Stubs/simulate_operation-high-gas-low-storage-response.json b/Tests/KukaiCoreSwiftTests/Stubs/simulate_operation-high-gas-low-storage-response.json new file mode 100644 index 00000000..2446a993 --- /dev/null +++ b/Tests/KukaiCoreSwiftTests/Stubs/simulate_operation-high-gas-low-storage-response.json @@ -0,0 +1,98 @@ +{ + "contents": [ + { + "amount": "0", + "metadata": { + "operation_result": { + "status": "applied", + "consumed_milligas": "2159468", + "storage_size": "3914125", + "balance_updates": [ + { + "change": "-96250", + "contract": "tz1Ue76bLW7boAcJEZf2kSGcamdBKVi4Kpss", + "kind": "contract" + }, + { + "change": "96250", + "kind": "burned" + } + ] + } + }, + "kind": "transaction", + "source": "tz1Ue76bLW7boAcJEZf2kSGcamdBKVi4Kpss", + "destination": "KT1CzVSa18hndYupV9NcXy3Qj7p8YFDZKVQv", + "fee": "0" + }, + { + "metadata": { + "operation_result": { + "paid_storage_size_diff": "67", + "consumed_milligas": "3401341", + "balance_updates": [ + { + "change": "-96000", + "contract": "tz1Ue76bLW7boAcJEZf2kSGcamdBKVi4Kpss", + "kind": "contract" + }, + { + "change": "96000", + "kind": "burned" + } + ], + "storage_size": "3348412", + "status": "applied" + }, + "internal_operation_results": [ + { + "result": { + "status": "applied", + "consumed_milligas": "13182268", + "storage_size": "3913857" + }, + "kind": "transaction", + "source": "KT1WvV2rPBQUFUqtCWmnnj8JX2gkmDtMBzQi" + }, + { + "source": "KT1WvV2rPBQUFUqtCWmnnj8JX2gkmDtMBzQi", + "kind": "transaction", + "result": { + "consumed_milligas": "321958", + "status": "applied", + "storage_size": "3913857" + } + }, + { + "kind": "transaction", + "result": { + "consumed_milligas": "2866760", + "storage_size": "3913924", + "status": "applied" + }, + "source": "KT1WvV2rPBQUFUqtCWmnnj8JX2gkmDtMBzQi" + } + ] + }, + "fee": "0", + "destination": "KT1WvV2rPBQUFUqtCWmnnj8JX2gkmDtMBzQi", + "amount": "0", + "kind": "transaction", + "source": "tz1Ue76bLW7boAcJEZf2kSGcamdBKVi4Kpss" + }, + { + "amount": "0", + "fee": "0", + "kind": "transaction", + "metadata": { + "operation_result": { + "status": "applied", + "consumed_milligas": "1819686", + "storage_size": "3913455" + } + }, + "source": "tz1Ue76bLW7boAcJEZf2kSGcamdBKVi4Kpss", + "destination": "KT1CzVSa18hndYupV9NcXy3Qj7p8YFDZKVQv" + } + ] +} \ No newline at end of file diff --git a/Tests/KukaiCoreSwiftTests/Stubs/simulate_operation-request1.json b/Tests/KukaiCoreSwiftTests/Stubs/simulate_operation-request1.json new file mode 100644 index 00000000..76f09136 --- /dev/null +++ b/Tests/KukaiCoreSwiftTests/Stubs/simulate_operation-request1.json @@ -0,0 +1 @@ +{"chain_id":"NetXxkAx4woPLyu","operation":{"branch":"BMLWVn1nEWeEzf6pxn3VYx7YcQ3zPay7HQtQ3rBMxuc7bXCG8BB","contents":[{"counter":"143231","fee":"0","gas_limit":"1040000","kind":"reveal","public_key":"edpkua1CRS7JZ9wr5yZQg6Lxs2oFMM5KwkN77g3n2BaWK8z4rPzb1s","source":"tz1Ue76bLW7boAcJEZf2kSGcamdBKVi4Kpss","storage_limit":"60000"},{"amount":"1","counter":"143232","destination":"tz1iQpiBTKtzfbVgogjyhPiGrrV5zAKUKNvy","fee":"0","gas_limit":"1040000","kind":"transaction","source":"tz1Ue76bLW7boAcJEZf2kSGcamdBKVi4Kpss","storage_limit":"60000"}],"signature":"edsigtXomBKi5CTRf5cjATJWSyaRvhfYNHqSUGrn4SdbYRcGwQrUGjzEfQDTuqHhuA8b2d8NarZjz8TRf65WkpQmo423BtomS8Q"}} \ No newline at end of file diff --git a/Tests/KukaiCoreSwiftTests/Stubs/simulate_operation-request2.json b/Tests/KukaiCoreSwiftTests/Stubs/simulate_operation-request2.json new file mode 100644 index 00000000..07f2fcca --- /dev/null +++ b/Tests/KukaiCoreSwiftTests/Stubs/simulate_operation-request2.json @@ -0,0 +1 @@ +{"chain_id":"NetXxkAx4woPLyu","operation":{"branch":"BLEDGNuADAwZfKK7iZ6PHnu7gZFSXuRPVFXe2PhSnb6aMyKn3mK","contents":[{"amount":"1000000","counter":"143231","destination":"tz1iQpiBTKtzfbVgogjyhPiGrrV5zAKUKNvy","fee":"0","gas_limit":"0","kind":"transaction","source":"tz1Ue76bLW7boAcJEZf2kSGcamdBKVi4Kpss","storage_limit":"0"}]}} \ No newline at end of file diff --git a/Tests/KukaiCoreSwiftTests/Stubs/simulate_operation-request3.json b/Tests/KukaiCoreSwiftTests/Stubs/simulate_operation-request3.json new file mode 100644 index 00000000..7c89283f --- /dev/null +++ b/Tests/KukaiCoreSwiftTests/Stubs/simulate_operation-request3.json @@ -0,0 +1 @@ +{"chain_id":"NetXxkAx4woPLyu","operation":{"branch":"BLEDGNuADAwZfKK7iZ6PHnu7gZFSXuRPVFXe2PhSnb6aMyKn3mK","contents":[{"counter":"143231","fee":"0","gas_limit":"3466666","kind":"reveal","public_key":"edpkua1CRS7JZ9wr5yZQg6Lxs2oFMM5KwkN77g3n2BaWK8z4rPzb1s","source":"tz1Ue76bLW7boAcJEZf2kSGcamdBKVi4Kpss","storage_limit":"60000"},{"amount":"1","counter":"143232","destination":"tz1iQpiBTKtzfbVgogjyhPiGrrV5zAKUKNvy","fee":"0","gas_limit":"3466666","kind":"transaction","source":"tz1Ue76bLW7boAcJEZf2kSGcamdBKVi4Kpss","storage_limit":"60000"}],"signature":"edsigtXomBKi5CTRf5cjATJWSyaRvhfYNHqSUGrn4SdbYRcGwQrUGjzEfQDTuqHhuA8b2d8NarZjz8TRf65WkpQmo423BtomS8Q"}} \ No newline at end of file diff --git a/Tests/KukaiCoreSwiftTests/Stubs/simulate_operation-response1.json b/Tests/KukaiCoreSwiftTests/Stubs/simulate_operation-response1.json new file mode 100644 index 00000000..1f0bb3c2 --- /dev/null +++ b/Tests/KukaiCoreSwiftTests/Stubs/simulate_operation-response1.json @@ -0,0 +1,66 @@ +{ + "contents": [ + { + "kind": "reveal", + "source": "tz1Ue76bLW7boAcJEZf2kSGcamdBKVi4Kpss", + "fee": "1410", + "counter": "431675", + "gas_limit": "10500", + "storage_limit": "257", + "public_key": "edpktsYtWnwnuiLkHySdNSihWEChdeFzyz9v8Vdb8aAWRibsPH7g7E", + "metadata": { + "balance_updates": [ + { + "kind": "contract", + "contract": "tz1Ue76bLW7boAcJEZf2kSGcamdBKVi4Kpss", + "change": "-1410", + "origin": "block" + }, + { + "kind": "freezer", + "category": "fees", + "delegate": "tz1Ke2h7sDdakHJQh8WX4Z372du1KChsksyU", + "cycle": 131, + "change": "1410", + "origin": "block" + } + ], + "operation_result": { + "status": "applied", + "consumed_milligas": "1000000" + } + } + }, + { + "kind": "transaction", + "source": "tz1Ue76bLW7boAcJEZf2kSGcamdBKVi4Kpss", + "fee": "0", + "counter": "431676", + "gas_limit": "1040000", + "storage_limit": "60000", + "amount": "1000000", + "destination": "tz1iQpiBTKtzfbVgogjyhPiGrrV5zAKUKNvy", + "metadata": { + "balance_updates": [], + "operation_result": { + "status": "applied", + "balance_updates": [ + { + "kind": "contract", + "contract": "tz1Ue76bLW7boAcJEZf2kSGcamdBKVi4Kpss", + "change": "-1000000", + "origin": "block" + }, + { + "kind": "contract", + "contract": "tz1iQpiBTKtzfbVgogjyhPiGrrV5zAKUKNvy", + "change": "1000000", + "origin": "block" + } + ], + "consumed_milligas": "1427000" + } + } + } + ] +} \ No newline at end of file diff --git a/Tests/KukaiCoreSwiftTests/Stubs/tzkt_transactions-transfers.json b/Tests/KukaiCoreSwiftTests/Stubs/tzkt_transactions-transfers.json index 58a13d63..81c147d4 100644 --- a/Tests/KukaiCoreSwiftTests/Stubs/tzkt_transactions-transfers.json +++ b/Tests/KukaiCoreSwiftTests/Stubs/tzkt_transactions-transfers.json @@ -1,5 +1,32 @@ [ { + "id": 1030074601046021, + "level": 5335465, + "timestamp": "2024-03-28T12:22:02Z", + "token": { + "id": 1030074601046017, + "contract": { + "address": "KT1PegvRtG4LTWGjNx8bswVEvqKNC1FBZBjL" + }, + "tokenId": "0", + "standard": "fa2", + "totalSupply": "1000000000000", + "metadata": { + "name": "TestFirstMCDao", + "symbol": "KAI", + "decimals": "10", + "description": "Testing onchain voting", + "thumbnailUri": "https://kukai-embed-docs.pages.dev/img/logo.svg", + "shouldPreferSymbol": "true" + } + }, + "to": { + "address": "tz1Ue76bLW7boAcJEZf2kSGcamdBKVi4Kpss" + }, + "amount": "400000000000", + "originationId": 1030074601046016 + }, + { "id": 619221159510017, "level": 3717283, "timestamp": "2023-06-16T11:28:11Z",