@railgun-community/waku-broadcaster-client-web 7.0.4 → 7.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -81,6 +81,7 @@ const updateFeesForBroadcaster = (chain, feeMessageData) => {
|
|
|
81
81
|
feesID: feeMessageData.feesID,
|
|
82
82
|
availableWallets: feeMessageData.availableWallets,
|
|
83
83
|
relayAdapt: feeMessageData.relayAdapt,
|
|
84
|
+
reliability: feeMessageData.reliability,
|
|
84
85
|
};
|
|
85
86
|
tokenFeeMap[tokenAddress] = cachedFee;
|
|
86
87
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handle-fees-message.js","sourceRoot":"","sources":["../../src/fees/handle-fees-message.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"handle-fees-message.js","sourceRoot":"","sources":["../../src/fees/handle-fees-message.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n verifyBroadcasterSignature,\n getRailgunWalletAddressData,\n} from '@railgun-community/wallet';\nimport {\n CachedTokenFee,\n Chain,\n BroadcasterFeeMessageData,\n} from '@railgun-community/shared-models';\nimport crypto from 'crypto';\nimport { IMessage } from '@waku/interfaces';\nimport { contentTopics } from '../waku/waku-topics.js';\nimport { BroadcasterDebug } from '../utils/broadcaster-debug.js';\nimport { BroadcasterConfig } from '../models/broadcaster-config.js';\nimport { BroadcasterFeeCache } from './broadcaster-fee-cache.js';\nimport { invalidBroadcasterVersion } from '../utils/broadcaster-util.js';\nimport { bytesToUtf8, hexToUTF8String } from '../utils/conversion.js';\nimport { isDefined } from '../utils/is-defined.js';\n\nconst isExpiredTimestamp = (\n timestamp: Optional<Date>,\n expirationFeeTimestamp: Optional<Date>,\n) => {\n if (!timestamp || !expirationFeeTimestamp) {\n return false;\n }\n let messageTimestamp = timestamp;\n if (messageTimestamp.getFullYear() === 1970) {\n // Waku timestamp bug.\n messageTimestamp = new Date(messageTimestamp.getTime() * 1000);\n }\n // Expired if message originated > 45 seconds ago.\n // check if fee expires within 45 seconds; if it doesn't ignore it.\n const nowTime = Date.now();\n const expirationMsec = nowTime - 45 * 1000;\n // const expirationFeeMsec = nowTime + 45 * 1000;\n const timestampExpired = messageTimestamp.getTime() < expirationMsec;\n if (timestampExpired) {\n BroadcasterDebug.log(\n `Broadcaster Fee STALE: Difference was ${\n (Date.now() - messageTimestamp.getTime()) / 1000\n }s`,\n );\n } else {\n BroadcasterDebug.log(\n `Broadcaster Fee receipt SUCCESS in ${\n (Date.now() - messageTimestamp.getTime()) / 1000\n }s`,\n );\n }\n // const feeExpired = expirationFeeTimestamp.getTime() < expirationFeeMsec;\n return timestampExpired; // || feeExpired;\n};\n\nexport const handleBroadcasterFeesMessage = async (\n chain: Chain,\n message: IMessage,\n contentTopic: string,\n) => {\n try {\n if (!isDefined(message.payload)) {\n BroadcasterDebug.log('Skipping Broadcaster fees message: NO PAYLOAD');\n return;\n }\n if (contentTopic !== contentTopics.fees(chain)) {\n BroadcasterDebug.log('Skipping Broadcaster fees message: WRONG TOPIC');\n return;\n }\n const payload = bytesToUtf8(message.payload);\n const { data, signature } = JSON.parse(payload) as {\n data: string;\n signature: string;\n };\n const utf8String = hexToUTF8String(data);\n const feeMessageData = JSON.parse(utf8String) as BroadcasterFeeMessageData;\n const feeExpirationTime = new Date(feeMessageData.feeExpiration);\n if (isExpiredTimestamp(message.timestamp, feeExpirationTime)) {\n BroadcasterDebug.log('Skipping fee message. Timestamp Expired.');\n return;\n }\n\n if (!isDefined(crypto.subtle) && BroadcasterConfig.IS_DEV) {\n BroadcasterDebug.log(\n 'Skipping Broadcaster fee validation in DEV. `crypto.subtle` does not exist (not secure: use https or localhost). ',\n );\n updateFeesForBroadcaster(chain, feeMessageData);\n return;\n }\n\n if (invalidBroadcasterVersion(feeMessageData.version)) {\n BroadcasterDebug.log(\n `Skipping Broadcaster outside version range: ${feeMessageData.version}, ${feeMessageData.railgunAddress}`,\n );\n return;\n }\n\n const { railgunAddress } = feeMessageData;\n const { viewingPublicKey } = getRailgunWalletAddressData(railgunAddress);\n //TODO: rename this to verifyBroadcasterSignature\n const verified = await verifyBroadcasterSignature(\n signature,\n data,\n viewingPublicKey,\n );\n if (!verified) {\n return;\n }\n\n updateFeesForBroadcaster(chain, feeMessageData);\n } catch (cause) {\n if (!(cause instanceof Error)) {\n throw new Error('Unexpected non-error thrown', { cause });\n }\n\n BroadcasterDebug.error(\n new Error('Error handling Broadcaster fees', { cause }),\n );\n }\n};\n\nconst updateFeesForBroadcaster = (\n chain: Chain,\n feeMessageData: BroadcasterFeeMessageData,\n) => {\n const tokenFeeMap: MapType<CachedTokenFee> = {};\n const tokenAddresses = Object.keys(feeMessageData.fees);\n tokenAddresses.forEach(tokenAddress => {\n const feePerUnitGas = feeMessageData.fees[tokenAddress];\n if (feePerUnitGas) {\n const cachedFee: CachedTokenFee = {\n feePerUnitGas,\n expiration: feeMessageData.feeExpiration,\n feesID: feeMessageData.feesID,\n availableWallets: feeMessageData.availableWallets,\n relayAdapt: feeMessageData.relayAdapt,\n reliability: feeMessageData.reliability,\n };\n tokenFeeMap[tokenAddress] = cachedFee;\n }\n });\n\n BroadcasterFeeCache.addTokenFees(\n chain,\n feeMessageData.railgunAddress,\n feeMessageData.feeExpiration,\n tokenFeeMap,\n feeMessageData.identifier,\n feeMessageData.version,\n feeMessageData.requiredPOIListKeys ?? [],\n );\n};\n"]}
|
|
@@ -42,6 +42,7 @@ export class BroadcasterSearch {
|
|
|
42
42
|
selectedBroadcasters.push(selectedBroadcaster);
|
|
43
43
|
});
|
|
44
44
|
});
|
|
45
|
+
selectedBroadcasters.sort((a, b) => b.tokenFee.reliability - a.tokenFee.reliability);
|
|
45
46
|
return selectedBroadcasters;
|
|
46
47
|
}
|
|
47
48
|
static findAllBroadcastersForChain(chain, useRelayAdapt) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"best-broadcaster.js","sourceRoot":"","sources":["../../src/search/best-broadcaster.ts"],"names":[],"mappings":"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","sourcesContent":["import { Chain, SelectedBroadcaster } from '@railgun-community/shared-models';\nimport { BroadcasterFeeCache } from '../fees/broadcaster-fee-cache.js';\nimport { AddressFilter } from '../filters/address-filter.js';\nimport { BroadcasterDebug } from '../utils/broadcaster-debug.js';\nimport {\n cachedFeeUnavailableOrExpired,\n shortenAddress,\n} from '../utils/broadcaster-util.js';\nimport { isDefined } from '../utils/is-defined.js';\n\nconst SelectedBroadcasterAscendingFee = (\n a: SelectedBroadcaster,\n b: SelectedBroadcaster,\n) => {\n const feeAmount =\n BigInt(a.tokenFee.feePerUnitGas) - BigInt(b.tokenFee.feePerUnitGas);\n if (feeAmount === BigInt(0)) {\n return 0;\n }\n return feeAmount > BigInt(0) ? 1 : -1;\n};\nexport class BroadcasterSearch {\n static findBroadcastersForToken(\n chain: Chain,\n tokenAddress: string,\n useRelayAdapt: boolean,\n ): Optional<SelectedBroadcaster[]> {\n const tokenAddressLowercase = tokenAddress.toLowerCase();\n const broadcasterTokenFees =\n BroadcasterFeeCache.feesForChain(chain)?.forToken[tokenAddressLowercase]\n ?.forBroadcaster;\n if (!isDefined(broadcasterTokenFees)) {\n return undefined;\n }\n\n const unfilteredAddresses = Object.keys(broadcasterTokenFees);\n const broadcasterAddresses = AddressFilter.filter(unfilteredAddresses);\n if (unfilteredAddresses.length !== broadcasterAddresses.length) {\n const removedAddresses = unfilteredAddresses.filter(\n address => !broadcasterAddresses.includes(address),\n );\n BroadcasterDebug.log(\n `Filtered RAILGUN broadcaster addresses ${\n removedAddresses.length\n }: ${removedAddresses\n .map(address => shortenAddress(address))\n .join(', ')}`,\n );\n }\n\n const selectedBroadcasters: SelectedBroadcaster[] = [];\n\n broadcasterAddresses.forEach((broadcasterAddress: string) => {\n const identifiers: string[] = Object.keys(\n broadcasterTokenFees[broadcasterAddress].forIdentifier,\n );\n identifiers.forEach((identifier: string) => {\n const nextCachedFee =\n broadcasterTokenFees[broadcasterAddress].forIdentifier[identifier];\n if (\n cachedFeeUnavailableOrExpired(nextCachedFee, chain, useRelayAdapt)\n ) {\n return;\n }\n const selectedBroadcaster: SelectedBroadcaster = {\n railgunAddress: broadcasterAddress,\n tokenFee: nextCachedFee,\n tokenAddress,\n };\n selectedBroadcasters.push(selectedBroadcaster);\n });\n });\n\n return selectedBroadcasters;\n }\n\n static findAllBroadcastersForChain(\n chain: Chain,\n useRelayAdapt: boolean,\n ): Optional<SelectedBroadcaster[]> {\n const broadcasterTokenFees =\n BroadcasterFeeCache.feesForChain(chain)?.forToken;\n if (!isDefined(broadcasterTokenFees)) {\n return undefined;\n }\n const allTokens = Object.keys(broadcasterTokenFees);\n const selectedBroadcasters: SelectedBroadcaster[] = [];\n allTokens.forEach((tokenAddress: string) => {\n const broadcastersForToken = this.findBroadcastersForToken(\n chain,\n tokenAddress,\n useRelayAdapt,\n );\n if (!broadcastersForToken) {\n return;\n }\n selectedBroadcasters.push(...broadcastersForToken);\n });\n return selectedBroadcasters;\n }\n\n static findRandomBroadcasterForToken(\n chain: Chain,\n tokenAddress: string,\n useRelayAdapt: boolean,\n percentageThreshold: number,\n ): Optional<SelectedBroadcaster> {\n const broadcasterTokenFees =\n BroadcasterFeeCache.feesForChain(chain)?.forToken;\n if (!isDefined(broadcasterTokenFees)) {\n return undefined;\n }\n\n const broadcastersForToken = this.findBroadcastersForToken(\n chain,\n tokenAddress,\n useRelayAdapt,\n );\n if (!isDefined(broadcastersForToken)) {\n return undefined;\n }\n if (broadcastersForToken.length === 0) {\n return undefined;\n }\n\n const sortedBroadcasters = broadcastersForToken.sort(\n SelectedBroadcasterAscendingFee,\n );\n\n const minFee = BigInt(sortedBroadcasters[0].tokenFee.feePerUnitGas);\n const feeThreshold = (minFee * (100n + BigInt(percentageThreshold))) / 100n;\n const eligibleBroadcasters = sortedBroadcasters.filter(\n broadcaster => BigInt(broadcaster.tokenFee.feePerUnitGas) <= feeThreshold,\n );\n const randomIndex = Math.floor(Math.random() * eligibleBroadcasters.length);\n\n return eligibleBroadcasters[randomIndex];\n }\n\n static findBestBroadcaster(\n chain: Chain,\n tokenAddress: string,\n useRelayAdapt: boolean,\n ): Optional<SelectedBroadcaster> {\n const broadcasterTokenFees =\n BroadcasterFeeCache.feesForChain(chain)?.forToken;\n if (!isDefined(broadcasterTokenFees)) {\n return undefined;\n }\n\n const broadcastersForToken = this.findBroadcastersForToken(\n chain,\n tokenAddress,\n useRelayAdapt,\n );\n if (!isDefined(broadcastersForToken)) {\n return undefined;\n }\n\n const sortedBroadcasters = broadcastersForToken.sort(\n SelectedBroadcasterAscendingFee,\n );\n\n return sortedBroadcasters[0];\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"best-broadcaster.js","sourceRoot":"","sources":["../../src/search/best-broadcaster.ts"],"names":[],"mappings":"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","sourcesContent":["import { Chain, SelectedBroadcaster } from '@railgun-community/shared-models';\nimport { BroadcasterFeeCache } from '../fees/broadcaster-fee-cache.js';\nimport { AddressFilter } from '../filters/address-filter.js';\nimport { BroadcasterDebug } from '../utils/broadcaster-debug.js';\nimport {\n cachedFeeUnavailableOrExpired,\n shortenAddress,\n} from '../utils/broadcaster-util.js';\nimport { isDefined } from '../utils/is-defined.js';\n\nconst SelectedBroadcasterAscendingFee = (\n a: SelectedBroadcaster,\n b: SelectedBroadcaster,\n) => {\n const feeAmount =\n BigInt(a.tokenFee.feePerUnitGas) - BigInt(b.tokenFee.feePerUnitGas);\n if (feeAmount === BigInt(0)) {\n return 0;\n }\n return feeAmount > BigInt(0) ? 1 : -1;\n};\nexport class BroadcasterSearch {\n static findBroadcastersForToken(\n chain: Chain,\n tokenAddress: string,\n useRelayAdapt: boolean,\n ): Optional<SelectedBroadcaster[]> {\n const tokenAddressLowercase = tokenAddress.toLowerCase();\n const broadcasterTokenFees =\n BroadcasterFeeCache.feesForChain(chain)?.forToken[tokenAddressLowercase]\n ?.forBroadcaster;\n if (!isDefined(broadcasterTokenFees)) {\n return undefined;\n }\n\n const unfilteredAddresses = Object.keys(broadcasterTokenFees);\n const broadcasterAddresses = AddressFilter.filter(unfilteredAddresses);\n if (unfilteredAddresses.length !== broadcasterAddresses.length) {\n const removedAddresses = unfilteredAddresses.filter(\n address => !broadcasterAddresses.includes(address),\n );\n BroadcasterDebug.log(\n `Filtered RAILGUN broadcaster addresses ${\n removedAddresses.length\n }: ${removedAddresses\n .map(address => shortenAddress(address))\n .join(', ')}`,\n );\n }\n\n const selectedBroadcasters: SelectedBroadcaster[] = [];\n\n broadcasterAddresses.forEach((broadcasterAddress: string) => {\n const identifiers: string[] = Object.keys(\n broadcasterTokenFees[broadcasterAddress].forIdentifier,\n );\n identifiers.forEach((identifier: string) => {\n const nextCachedFee =\n broadcasterTokenFees[broadcasterAddress].forIdentifier[identifier];\n if (\n cachedFeeUnavailableOrExpired(nextCachedFee, chain, useRelayAdapt)\n ) {\n return;\n }\n const selectedBroadcaster: SelectedBroadcaster = {\n railgunAddress: broadcasterAddress,\n tokenFee: nextCachedFee,\n tokenAddress,\n };\n selectedBroadcasters.push(selectedBroadcaster);\n });\n });\n\n selectedBroadcasters.sort(\n (a, b) => b.tokenFee.reliability - a.tokenFee.reliability,\n );\n return selectedBroadcasters;\n }\n\n static findAllBroadcastersForChain(\n chain: Chain,\n useRelayAdapt: boolean,\n ): Optional<SelectedBroadcaster[]> {\n const broadcasterTokenFees =\n BroadcasterFeeCache.feesForChain(chain)?.forToken;\n if (!isDefined(broadcasterTokenFees)) {\n return undefined;\n }\n const allTokens = Object.keys(broadcasterTokenFees);\n const selectedBroadcasters: SelectedBroadcaster[] = [];\n allTokens.forEach((tokenAddress: string) => {\n const broadcastersForToken = this.findBroadcastersForToken(\n chain,\n tokenAddress,\n useRelayAdapt,\n );\n if (!broadcastersForToken) {\n return;\n }\n selectedBroadcasters.push(...broadcastersForToken);\n });\n return selectedBroadcasters;\n }\n\n static findRandomBroadcasterForToken(\n chain: Chain,\n tokenAddress: string,\n useRelayAdapt: boolean,\n percentageThreshold: number,\n ): Optional<SelectedBroadcaster> {\n const broadcasterTokenFees =\n BroadcasterFeeCache.feesForChain(chain)?.forToken;\n if (!isDefined(broadcasterTokenFees)) {\n return undefined;\n }\n\n const broadcastersForToken = this.findBroadcastersForToken(\n chain,\n tokenAddress,\n useRelayAdapt,\n );\n if (!isDefined(broadcastersForToken)) {\n return undefined;\n }\n if (broadcastersForToken.length === 0) {\n return undefined;\n }\n\n const sortedBroadcasters = broadcastersForToken.sort(\n SelectedBroadcasterAscendingFee,\n );\n\n const minFee = BigInt(sortedBroadcasters[0].tokenFee.feePerUnitGas);\n const feeThreshold = (minFee * (100n + BigInt(percentageThreshold))) / 100n;\n const eligibleBroadcasters = sortedBroadcasters.filter(\n broadcaster => BigInt(broadcaster.tokenFee.feePerUnitGas) <= feeThreshold,\n );\n const randomIndex = Math.floor(Math.random() * eligibleBroadcasters.length);\n\n return eligibleBroadcasters[randomIndex];\n }\n\n static findBestBroadcaster(\n chain: Chain,\n tokenAddress: string,\n useRelayAdapt: boolean,\n ): Optional<SelectedBroadcaster> {\n const broadcasterTokenFees =\n BroadcasterFeeCache.feesForChain(chain)?.forToken;\n if (!isDefined(broadcasterTokenFees)) {\n return undefined;\n }\n\n const broadcastersForToken = this.findBroadcastersForToken(\n chain,\n tokenAddress,\n useRelayAdapt,\n );\n if (!isDefined(broadcastersForToken)) {\n return undefined;\n }\n\n const sortedBroadcasters = broadcastersForToken.sort(\n SelectedBroadcasterAscendingFee,\n );\n\n return sortedBroadcasters[0];\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@railgun-community/waku-broadcaster-client-web",
|
|
3
|
-
"version": "7.0
|
|
3
|
+
"version": "7.1.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -30,13 +30,13 @@
|
|
|
30
30
|
"libp2p": "^1.1.2"
|
|
31
31
|
},
|
|
32
32
|
"peerDependencies": {
|
|
33
|
-
"@railgun-community/shared-models": "7.0
|
|
34
|
-
"@railgun-community/wallet": "
|
|
33
|
+
"@railgun-community/shared-models": "7.1.0",
|
|
34
|
+
"@railgun-community/wallet": "10.0.2",
|
|
35
35
|
"ethers": "github:Railgun-Community/ethers.js#v6.7.10"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
|
-
"@railgun-community/shared-models": "7.0
|
|
39
|
-
"@railgun-community/wallet": "
|
|
38
|
+
"@railgun-community/shared-models": "7.1.0",
|
|
39
|
+
"@railgun-community/wallet": "10.0.2",
|
|
40
40
|
"ethers": "github:Railgun-Community/ethers.js#v6.7.10",
|
|
41
41
|
"@types/chai": "^4.3.5",
|
|
42
42
|
"@types/chai-as-promised": "^7.1.5",
|