mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
Merge branch 'master' into e2e-selector
This commit is contained in:
commit
971204eb06
@ -3,6 +3,7 @@
|
|||||||
## Current Master
|
## Current Master
|
||||||
|
|
||||||
- Fix bug where the "Reset account" feature would not clear the network cache.
|
- Fix bug where the "Reset account" feature would not clear the network cache.
|
||||||
|
- Increase maximum gas limit, to allow very gas heavy transactions, since block gas limits have been stable.
|
||||||
|
|
||||||
## 4.4.0 Mon Mar 26 2018
|
## 4.4.0 Mon Mar 26 2018
|
||||||
|
|
||||||
|
@ -14,9 +14,15 @@
|
|||||||
"address": {
|
"address": {
|
||||||
"message": "Adresse"
|
"message": "Adresse"
|
||||||
},
|
},
|
||||||
|
"addCustomToken": {
|
||||||
|
"message": "Eigenen Token hinzufügen"
|
||||||
|
},
|
||||||
"addToken": {
|
"addToken": {
|
||||||
"message": "Token hinzufügen"
|
"message": "Token hinzufügen"
|
||||||
},
|
},
|
||||||
|
"addTokens": {
|
||||||
|
"message": "Token hinzufügen"
|
||||||
|
},
|
||||||
"amount": {
|
"amount": {
|
||||||
"message": "Betrag"
|
"message": "Betrag"
|
||||||
},
|
},
|
||||||
@ -31,9 +37,15 @@
|
|||||||
"message": "MetaMask",
|
"message": "MetaMask",
|
||||||
"description": "Der Name der Erweiterung"
|
"description": "Der Name der Erweiterung"
|
||||||
},
|
},
|
||||||
|
"approved": {
|
||||||
|
"message": "Genehmigt"
|
||||||
|
},
|
||||||
"attemptingConnect": {
|
"attemptingConnect": {
|
||||||
"message": "Versuch mit der Blockchain zu verbinden."
|
"message": "Versuch mit der Blockchain zu verbinden."
|
||||||
},
|
},
|
||||||
|
"attributions": {
|
||||||
|
"message": "Was wir verwenden"
|
||||||
|
},
|
||||||
"available": {
|
"available": {
|
||||||
"message": "Verfügbar"
|
"message": "Verfügbar"
|
||||||
},
|
},
|
||||||
@ -43,6 +55,9 @@
|
|||||||
"balance": {
|
"balance": {
|
||||||
"message": "Guthaben:"
|
"message": "Guthaben:"
|
||||||
},
|
},
|
||||||
|
"balances": {
|
||||||
|
"message": "Deine Guthaben"
|
||||||
|
},
|
||||||
"balanceIsInsufficientGas": {
|
"balanceIsInsufficientGas": {
|
||||||
"message": "Guthaben unzureichend für den aktuellen gesamten Gasbetrag"
|
"message": "Guthaben unzureichend für den aktuellen gesamten Gasbetrag"
|
||||||
},
|
},
|
||||||
@ -69,7 +84,7 @@
|
|||||||
"message": "Auf Coinbase kaufen"
|
"message": "Auf Coinbase kaufen"
|
||||||
},
|
},
|
||||||
"buyCoinbaseExplainer": {
|
"buyCoinbaseExplainer": {
|
||||||
"message": "Coinbase ist die weltweit bekannteste Möglichkeit bitcoin, ethereum und litecoin zu kaufen und verkaufen."
|
"message": "Coinbase ist die weltweit bekannteste Art und Weise um bitcoin, ethereum und litecoin zu kaufen und verkaufen."
|
||||||
},
|
},
|
||||||
"ok": {
|
"ok": {
|
||||||
"message": "Ok"
|
"message": "Ok"
|
||||||
@ -105,7 +120,7 @@
|
|||||||
"message": "Zu Coinbase fortfahren"
|
"message": "Zu Coinbase fortfahren"
|
||||||
},
|
},
|
||||||
"contractDeployment": {
|
"contractDeployment": {
|
||||||
"message": "Smart Contract ausführen"
|
"message": "Smart Contract Ausführung"
|
||||||
},
|
},
|
||||||
"conversionProgress": {
|
"conversionProgress": {
|
||||||
"message": "Umtausch in Arbeit"
|
"message": "Umtausch in Arbeit"
|
||||||
@ -148,7 +163,7 @@
|
|||||||
"description": "Börsentyp (Kryptowährungen)"
|
"description": "Börsentyp (Kryptowährungen)"
|
||||||
},
|
},
|
||||||
"currentConversion": {
|
"currentConversion": {
|
||||||
"message": "Aktueller Umtausch"
|
"message": "Aktuelle Tauschwährung"
|
||||||
},
|
},
|
||||||
"currentNetwork": {
|
"currentNetwork": {
|
||||||
"message": "Aktuelles Netzwerk"
|
"message": "Aktuelles Netzwerk"
|
||||||
@ -185,7 +200,7 @@
|
|||||||
"description": "Teilt dem Benutzer mit welchen Token er beim Einzahlen mit Shapeshift ausgewählt hat"
|
"description": "Teilt dem Benutzer mit welchen Token er beim Einzahlen mit Shapeshift ausgewählt hat"
|
||||||
},
|
},
|
||||||
"depositEth": {
|
"depositEth": {
|
||||||
"message": "Eth einzahlen"
|
"message": "Eth kaufen"
|
||||||
},
|
},
|
||||||
"depositEther": {
|
"depositEther": {
|
||||||
"message": "Ether einzahlen"
|
"message": "Ether einzahlen"
|
||||||
@ -274,7 +289,7 @@
|
|||||||
"message": "Folge uns auf Twitter"
|
"message": "Folge uns auf Twitter"
|
||||||
},
|
},
|
||||||
"from": {
|
"from": {
|
||||||
"message": "von"
|
"message": "Von"
|
||||||
},
|
},
|
||||||
"fromToSame": {
|
"fromToSame": {
|
||||||
"message": "Ziel- und Ursprungsadresse dürfen nicht identisch sein"
|
"message": "Ziel- und Ursprungsadresse dürfen nicht identisch sein"
|
||||||
@ -347,14 +362,14 @@
|
|||||||
"message": "Es erlaubt dir ether & Token zu halten und dient dir als Verbindung zu dezentralisierten Applikationen."
|
"message": "Es erlaubt dir ether & Token zu halten und dient dir als Verbindung zu dezentralisierten Applikationen."
|
||||||
},
|
},
|
||||||
"import": {
|
"import": {
|
||||||
"message": "Import",
|
"message": "Importieren",
|
||||||
"description": "Button um den Account aus einer ausgewählten Datei zu importieren"
|
"description": "Button um den Account aus einer ausgewählten Datei zu importieren"
|
||||||
},
|
},
|
||||||
"importAccount": {
|
"importAccount": {
|
||||||
"message": "Account importieren"
|
"message": "Account importieren"
|
||||||
},
|
},
|
||||||
"importAccountMsg": {
|
"importAccountMsg": {
|
||||||
"message":" Importierte Accounts werden nicht mit der Seed Wörterfolge deines ursprünglichen MetaMask Accounts verknüpft. Erfahre mehr über importierte Accounts."
|
"message":" Importierte Accounts werden nicht mit der Seed-Wörterfolge deines ursprünglichen MetaMask Accounts verknüpft. Erfahre mehr über importierte Accounts."
|
||||||
},
|
},
|
||||||
"importAnAccount": {
|
"importAnAccount": {
|
||||||
"message": "Einen Account importieren"
|
"message": "Einen Account importieren"
|
||||||
@ -441,10 +456,10 @@
|
|||||||
"message": "Frei"
|
"message": "Frei"
|
||||||
},
|
},
|
||||||
"loweCaseWords": {
|
"loweCaseWords": {
|
||||||
"message": "Die Wörter der Seed Wörterfolgen sind alle kleingeschrieben"
|
"message": "Die Wörter der Seed-Wörterfolgen sind alle kleingeschrieben"
|
||||||
},
|
},
|
||||||
"mainnet": {
|
"mainnet": {
|
||||||
"message": "Ethereum Hauptnetzwerk (Main Net)"
|
"message": "Ethereum Main Net"
|
||||||
},
|
},
|
||||||
"message": {
|
"message": {
|
||||||
"message": "Nachricht"
|
"message": "Nachricht"
|
||||||
@ -541,7 +556,7 @@
|
|||||||
"description": "Für den Import eine Accounts mit Hilfe eines Private Keys"
|
"description": "Für den Import eine Accounts mit Hilfe eines Private Keys"
|
||||||
},
|
},
|
||||||
"pasteSeed": {
|
"pasteSeed": {
|
||||||
"message": "Füge deine Seed Wörterfolge hier ein!"
|
"message": "Füge deine Seed-Wörterfolge hier ein!"
|
||||||
},
|
},
|
||||||
"personalAddressDetected": {
|
"personalAddressDetected": {
|
||||||
"message": "Personalisierte Adresse identifiziert. Bitte füge die Token Contract Adresse ein."
|
"message": "Personalisierte Adresse identifiziert. Bitte füge die Token Contract Adresse ein."
|
||||||
@ -566,7 +581,7 @@
|
|||||||
"message": "QR Code anzeigen"
|
"message": "QR Code anzeigen"
|
||||||
},
|
},
|
||||||
"readdToken": {
|
"readdToken": {
|
||||||
"message": "Du kannst diesen Token zukünftig wieder hinzufügen indem du in den Menüpunkt \"Token hinzufügen\" in den Einstellungen deines Accounts gehst."
|
"message": "Du kannst diesen Token immer erneut hinzufügen, indem du in den Menüpunkt \"Token hinzufügen\" in den Einstellungen deines Accounts gehst."
|
||||||
},
|
},
|
||||||
"readMore": {
|
"readMore": {
|
||||||
"message": "Hier mehr erfahren."
|
"message": "Hier mehr erfahren."
|
||||||
@ -590,7 +605,7 @@
|
|||||||
"message": "Account zurücksetzten"
|
"message": "Account zurücksetzten"
|
||||||
},
|
},
|
||||||
"restoreFromSeed": {
|
"restoreFromSeed": {
|
||||||
"message": "Mit Hilfe der Seed Wörterfolge wiederherstellen."
|
"message": "Mit Hilfe der Seed-Wörterfolge wiederherstellen."
|
||||||
},
|
},
|
||||||
"restoreVault": {
|
"restoreVault": {
|
||||||
"message": "Vault wiederherstellen"
|
"message": "Vault wiederherstellen"
|
||||||
@ -605,13 +620,13 @@
|
|||||||
"message": "Wallet Seed"
|
"message": "Wallet Seed"
|
||||||
},
|
},
|
||||||
"revealSeedWords": {
|
"revealSeedWords": {
|
||||||
"message": "Seed Wörterfolge anzeigen"
|
"message": "Seed-Wörterfolge anzeigen"
|
||||||
},
|
},
|
||||||
"revealSeedWordsWarning": {
|
"revealSeedWordsWarning": {
|
||||||
"message": "Bitte niemals deine Seed Wörterfolge an einem öffentlichen Ort kenntlich machen. Mit diesen Wörtern können alle deine Accounts gestohlen werden."
|
"message": "Bitte niemals deine Seed-Wörterfolge an einem öffentlichen Ort kenntlich machen. Mit diesen Wörtern können alle deine Accounts gestohlen werden."
|
||||||
},
|
},
|
||||||
"revert": {
|
"revert": {
|
||||||
"message": "Zurück gehen"
|
"message": "Rückgängig machen"
|
||||||
},
|
},
|
||||||
"rinkeby": {
|
"rinkeby": {
|
||||||
"message": "Rinkeby Testnetzwerk"
|
"message": "Rinkeby Testnetzwerk"
|
||||||
@ -623,7 +638,7 @@
|
|||||||
"message": "Aktueller RPC"
|
"message": "Aktueller RPC"
|
||||||
},
|
},
|
||||||
"connectingToMainnet": {
|
"connectingToMainnet": {
|
||||||
"message": "Verbinde zum Ethereum Hauptnetzwerk (Main Net)"
|
"message": "Verbinde zum Ethereum Main Net"
|
||||||
},
|
},
|
||||||
"connectingToRopsten": {
|
"connectingToRopsten": {
|
||||||
"message": " Verbinde zum Ropsten Testnetzwerk"
|
"message": " Verbinde zum Ropsten Testnetzwerk"
|
||||||
@ -649,7 +664,7 @@
|
|||||||
"description": "Prozess des Exportieren eines Accounts"
|
"description": "Prozess des Exportieren eines Accounts"
|
||||||
},
|
},
|
||||||
"saveSeedAsFile": {
|
"saveSeedAsFile": {
|
||||||
"message": "Seed Wörterfolge als Datei speichern"
|
"message": "Seed-Wörterfolge als Datei speichern"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"message": "Suche"
|
"message": "Suche"
|
||||||
@ -661,7 +676,7 @@
|
|||||||
"message": "Neues Passwort (min. 8 Zeichen)"
|
"message": "Neues Passwort (min. 8 Zeichen)"
|
||||||
},
|
},
|
||||||
"seedPhraseReq": {
|
"seedPhraseReq": {
|
||||||
"message": "Seed Wörterfolgen bestehen aus 12 Wörtern"
|
"message": "Seed-Wörterfolgen bestehen aus 12 Wörtern"
|
||||||
},
|
},
|
||||||
"select": {
|
"select": {
|
||||||
"message": "Auswählen"
|
"message": "Auswählen"
|
||||||
@ -685,7 +700,7 @@
|
|||||||
"message": "Token senden"
|
"message": "Token senden"
|
||||||
},
|
},
|
||||||
"onlySendToEtherAddress": {
|
"onlySendToEtherAddress": {
|
||||||
"message": "ETH nur zu einer Ethereum Adresse senden."
|
"message": "ETH unbedingt nur zu einer Ethereum Adresse senden."
|
||||||
},
|
},
|
||||||
"sendTokensAnywhere": {
|
"sendTokensAnywhere": {
|
||||||
"message": "Token zu einer beliebigen Person mit einem Ethereumaccount senden"
|
"message": "Token zu einer beliebigen Person mit einem Ethereumaccount senden"
|
||||||
@ -742,7 +757,7 @@
|
|||||||
"message": "Einreichen"
|
"message": "Einreichen"
|
||||||
},
|
},
|
||||||
"submitted": {
|
"submitted": {
|
||||||
"message": "Eingereicht"
|
"message": "Abgeschickt"
|
||||||
},
|
},
|
||||||
"supportCenter": {
|
"supportCenter": {
|
||||||
"message": "Gehe zu unserem Support Center"
|
"message": "Gehe zu unserem Support Center"
|
||||||
@ -782,7 +797,7 @@
|
|||||||
"message": "Tokensymbol"
|
"message": "Tokensymbol"
|
||||||
},
|
},
|
||||||
"tokenWarning1": {
|
"tokenWarning1": {
|
||||||
"message": "Behalte die Token die du mit deinem MetaMask Account gekauft hast im Auge. Wenn du Token mit einem anderen Account gekauft hast, werden diese hier nicht angezeigt."
|
"message": "Behalte die Token die du mit deinem MetaMask Account gekauft hast im Blick. Wenn du Token mit einem anderen Account gekauft hast, werden diese hier nicht angezeigt."
|
||||||
},
|
},
|
||||||
"total": {
|
"total": {
|
||||||
"message": "Gesamt"
|
"message": "Gesamt"
|
||||||
@ -853,7 +868,7 @@
|
|||||||
"message": " Account einsehen"
|
"message": " Account einsehen"
|
||||||
},
|
},
|
||||||
"visitWebSite": {
|
"visitWebSite": {
|
||||||
"message": "Gehe zu unsere Webseite"
|
"message": "Gehe zu unserer Webseite"
|
||||||
},
|
},
|
||||||
"warning": {
|
"warning": {
|
||||||
"message": "Warnung"
|
"message": "Warnung"
|
||||||
|
@ -299,7 +299,7 @@
|
|||||||
"message": "De gaslimiet moet minstens 21000 zijn"
|
"message": "De gaslimiet moet minstens 21000 zijn"
|
||||||
},
|
},
|
||||||
"generatingSeed": {
|
"generatingSeed": {
|
||||||
"message": "Zaad produceren ..."
|
"message": "Back-up woorden produceren ..."
|
||||||
},
|
},
|
||||||
"gasPrice": {
|
"gasPrice": {
|
||||||
"message": "Gasprijs (GWEI)"
|
"message": "Gasprijs (GWEI)"
|
||||||
@ -432,7 +432,7 @@
|
|||||||
"message": "Los"
|
"message": "Los"
|
||||||
},
|
},
|
||||||
"loweCaseWords": {
|
"loweCaseWords": {
|
||||||
"message": "zaadwoorden hebben alleen kleine letters"
|
"message": "back-up woorden hebben alleen kleine letters"
|
||||||
},
|
},
|
||||||
"mainnet": {
|
"mainnet": {
|
||||||
"message": "belangrijkste ethereum-netwerk"
|
"message": "belangrijkste ethereum-netwerk"
|
||||||
@ -532,7 +532,7 @@
|
|||||||
"description": "Voor het importeren van een account vanaf een privésleutel"
|
"description": "Voor het importeren van een account vanaf een privésleutel"
|
||||||
},
|
},
|
||||||
"pasteSeed": {
|
"pasteSeed": {
|
||||||
"message": "Plak je zaadzin hier!"
|
"message": "Plak je back-up woorden hier!"
|
||||||
},
|
},
|
||||||
"personalAddressDetected": {
|
"personalAddressDetected": {
|
||||||
"message": "Persoonlijk adres gedetecteerd. Voer het tokencontractadres in."
|
"message": "Persoonlijk adres gedetecteerd. Voer het tokencontractadres in."
|
||||||
@ -581,7 +581,7 @@
|
|||||||
"message": "Account opnieuw instellen"
|
"message": "Account opnieuw instellen"
|
||||||
},
|
},
|
||||||
"restoreFromSeed": {
|
"restoreFromSeed": {
|
||||||
"message": "Herstel van zaaduitdrukking"
|
"message": "Herstel vanuit back-up woorden"
|
||||||
},
|
},
|
||||||
"required": {
|
"required": {
|
||||||
"message": "Verplicht"
|
"message": "Verplicht"
|
||||||
@ -590,10 +590,10 @@
|
|||||||
"message": "Probeer hier opnieuw met een hogere gasprijs"
|
"message": "Probeer hier opnieuw met een hogere gasprijs"
|
||||||
},
|
},
|
||||||
"revealSeedWords": {
|
"revealSeedWords": {
|
||||||
"message": "Onthul zaadwoorden"
|
"message": "Onthul back-up woorden"
|
||||||
},
|
},
|
||||||
"revealSeedWordsWarning": {
|
"revealSeedWordsWarning": {
|
||||||
"message": "Herstel je zaadwoorden niet op een openbare plaats! Deze woorden kunnen worden gebruikt om al uw accounts te stelen."
|
"message": "Zorg dat je back-up woorden niet op een openbare plaats bekijkt! Deze woorden kunnen worden gebruikt om al uw accounts opnieuw te genereren (en dus uw account te stelen)."
|
||||||
},
|
},
|
||||||
"revert": {
|
"revert": {
|
||||||
"message": "terugkeren"
|
"message": "terugkeren"
|
||||||
@ -616,7 +616,7 @@
|
|||||||
"description": "Account export proces"
|
"description": "Account export proces"
|
||||||
},
|
},
|
||||||
"saveSeedAsFile": {
|
"saveSeedAsFile": {
|
||||||
"message": "Bewaar zaadwoorden als bestand"
|
"message": "Bewaar back-up woorden als bestand"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"message": "Zoeken"
|
"message": "Zoeken"
|
||||||
@ -625,7 +625,7 @@
|
|||||||
"message": "Voer hier je geheime twaalfwoordfrase in om je kluis te herstellen."
|
"message": "Voer hier je geheime twaalfwoordfrase in om je kluis te herstellen."
|
||||||
},
|
},
|
||||||
"seedPhraseReq": {
|
"seedPhraseReq": {
|
||||||
"message": "zaadzinnen zijn 12 woorden lang"
|
"message": "Back-up woorden zijn 12 woorden lang"
|
||||||
},
|
},
|
||||||
"select": {
|
"select": {
|
||||||
"message": "kiezen"
|
"message": "kiezen"
|
||||||
|
@ -52,7 +52,7 @@ class CurrencyController {
|
|||||||
this.setConversionDate(Number(parsedResponse.timestamp))
|
this.setConversionDate(Number(parsedResponse.timestamp))
|
||||||
}).catch((err) => {
|
}).catch((err) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
console.warn('MetaMask - Failed to query currency conversion.')
|
console.warn(`MetaMask - Failed to query currency conversion:`, currentCurrency, err)
|
||||||
this.setConversionRate(0)
|
this.setConversionRate(0)
|
||||||
this.setConversionDate('N/A')
|
this.setConversionDate('N/A')
|
||||||
}
|
}
|
||||||
|
@ -273,12 +273,14 @@ module.exports = class TransactionController extends EventEmitter {
|
|||||||
|
|
||||||
async signTransaction (txId) {
|
async signTransaction (txId) {
|
||||||
const txMeta = this.txStateManager.getTx(txId)
|
const txMeta = this.txStateManager.getTx(txId)
|
||||||
const txParams = txMeta.txParams
|
|
||||||
const fromAddress = txParams.from
|
|
||||||
// add network/chain id
|
// add network/chain id
|
||||||
txParams.chainId = ethUtil.addHexPrefix(this.getChainId().toString(16))
|
const chainId = this.getChainId()
|
||||||
|
const txParams = Object.assign({}, txMeta.txParams, { chainId })
|
||||||
|
// sign tx
|
||||||
|
const fromAddress = txParams.from
|
||||||
const ethTx = new Transaction(txParams)
|
const ethTx = new Transaction(txParams)
|
||||||
await this.signEthTx(ethTx, fromAddress)
|
await this.signEthTx(ethTx, fromAddress)
|
||||||
|
// set state to signed
|
||||||
this.txStateManager.setTxStatusSigned(txMeta.id)
|
this.txStateManager.setTxStatusSigned(txMeta.id)
|
||||||
const rawTx = ethUtil.bufferToHex(ethTx.serialize())
|
const rawTx = ethUtil.bufferToHex(ethTx.serialize())
|
||||||
return rawTx
|
return rawTx
|
||||||
|
@ -31,14 +31,13 @@ class NonceTracker {
|
|||||||
const networkNonceResult = await this._getNetworkNextNonce(address)
|
const networkNonceResult = await this._getNetworkNextNonce(address)
|
||||||
const highestLocallyConfirmed = this._getHighestLocallyConfirmed(address)
|
const highestLocallyConfirmed = this._getHighestLocallyConfirmed(address)
|
||||||
const nextNetworkNonce = networkNonceResult.nonce
|
const nextNetworkNonce = networkNonceResult.nonce
|
||||||
const highestLocalNonce = highestLocallyConfirmed
|
const highestSuggested = Math.max(nextNetworkNonce, highestLocallyConfirmed)
|
||||||
const highestSuggested = Math.max(nextNetworkNonce, highestLocalNonce)
|
|
||||||
|
|
||||||
const pendingTxs = this.getPendingTransactions(address)
|
const pendingTxs = this.getPendingTransactions(address)
|
||||||
const localNonceResult = this._getHighestContinuousFrom(pendingTxs, highestSuggested) || 0
|
const localNonceResult = this._getHighestContinuousFrom(pendingTxs, highestSuggested) || 0
|
||||||
|
|
||||||
nonceDetails.params = {
|
nonceDetails.params = {
|
||||||
highestLocalNonce,
|
highestLocallyConfirmed,
|
||||||
highestSuggested,
|
highestSuggested,
|
||||||
nextNetworkNonce,
|
nextNetworkNonce,
|
||||||
}
|
}
|
||||||
|
@ -23,10 +23,20 @@ function setupRaven(opts) {
|
|||||||
release,
|
release,
|
||||||
transport: function(opts) {
|
transport: function(opts) {
|
||||||
const report = opts.data
|
const report = opts.data
|
||||||
// simplify ethjs error messages
|
// simplify certain complex error messages
|
||||||
report.exception.values.forEach(item => {
|
report.exception.values.forEach(item => {
|
||||||
item.value = extractEthjsErrorMessage(item.value)
|
let errorMessage = item.value
|
||||||
|
// simplify ethjs error messages
|
||||||
|
errorMessage = extractEthjsErrorMessage(errorMessage)
|
||||||
|
// simplify 'Transaction Failed: known transaction'
|
||||||
|
if (errorMessage.indexOf('Transaction Failed: known transaction') === 0) {
|
||||||
|
// cut the hash from the error message
|
||||||
|
errorMessage = 'Transaction Failed: known transaction'
|
||||||
|
}
|
||||||
|
// finalize
|
||||||
|
item.value = errorMessage
|
||||||
})
|
})
|
||||||
|
|
||||||
// modify report urls
|
// modify report urls
|
||||||
rewriteReportUrls(report)
|
rewriteReportUrls(report)
|
||||||
// make request normally
|
// make request normally
|
||||||
|
@ -106,12 +106,9 @@ module.exports = class TransactionStateManager extends EventEmitter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
updateTx (txMeta, note) {
|
updateTx (txMeta, note) {
|
||||||
|
// validate txParams
|
||||||
if (txMeta.txParams) {
|
if (txMeta.txParams) {
|
||||||
Object.keys(txMeta.txParams).forEach((key) => {
|
this.validateTxParams(txMeta.txParams)
|
||||||
const value = txMeta.txParams[key]
|
|
||||||
if (typeof value !== 'string') console.error(`${key}: ${value} in txParams is not a string`)
|
|
||||||
if (!ethUtil.isHexPrefixed(value)) console.error('is not hex prefixed, anything on txParams must be hex prefixed')
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// create txMeta snapshot for history
|
// create txMeta snapshot for history
|
||||||
@ -139,6 +136,15 @@ module.exports = class TransactionStateManager extends EventEmitter {
|
|||||||
this.updateTx(txMeta, `txStateManager#updateTxParams`)
|
this.updateTx(txMeta, `txStateManager#updateTxParams`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// validates txParams members by type
|
||||||
|
validateTxParams(txParams) {
|
||||||
|
Object.keys(txParams).forEach((key) => {
|
||||||
|
const value = txParams[key]
|
||||||
|
if (typeof value !== 'string') throw new Error(`${key}: ${value} in txParams is not a string`)
|
||||||
|
if (!ethUtil.isHexPrefixed(value)) throw new Error('is not hex prefixed, everything on txParams must be hex prefixed')
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Takes an object of fields to search for eg:
|
Takes an object of fields to search for eg:
|
||||||
let thingsToLookFor = {
|
let thingsToLookFor = {
|
||||||
|
@ -62,8 +62,8 @@ PendingTx.prototype.render = function () {
|
|||||||
const gasBn = hexToBn(gas)
|
const gasBn = hexToBn(gas)
|
||||||
// default to 8MM gas limit
|
// default to 8MM gas limit
|
||||||
const gasLimit = new BN(parseInt(blockGasLimit) || '8000000')
|
const gasLimit = new BN(parseInt(blockGasLimit) || '8000000')
|
||||||
const safeGasLimitBN = this.bnMultiplyByFraction(gasLimit, 19, 20)
|
const safeGasLimitBN = this.bnMultiplyByFraction(gasLimit, 99, 100)
|
||||||
const saferGasLimitBN = this.bnMultiplyByFraction(gasLimit, 18, 20)
|
const saferGasLimitBN = this.bnMultiplyByFraction(gasLimit, 98, 100)
|
||||||
const safeGasLimit = safeGasLimitBN.toString(10)
|
const safeGasLimit = safeGasLimitBN.toString(10)
|
||||||
|
|
||||||
// Gas Price
|
// Gas Price
|
||||||
@ -311,7 +311,7 @@ PendingTx.prototype.render = function () {
|
|||||||
style: {
|
style: {
|
||||||
fontSize: '0.9em',
|
fontSize: '0.9em',
|
||||||
},
|
},
|
||||||
}, 'Gas limit set dangerously high. Approving this transaction is likely to fail.')
|
}, 'Gas limit set dangerously high. Approving this transaction is liable to fail.')
|
||||||
: null,
|
: null,
|
||||||
]),
|
]),
|
||||||
|
|
||||||
|
86
package-lock.json
generated
86
package-lock.json
generated
@ -224,6 +224,15 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@sinonjs/formatio": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "http://registry.npmjs.org/@sinonjs/formatio/-/formatio-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-ls6CAMA6/5gG+O/IdsBcblvnd8qcO/l1TYoNeAzp3wcISOxlPXQEus0mLcdwazEkWjaBdaJ3TaxmNgCLWwvWzg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"samsam": "1.3.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"@types/node": {
|
"@types/node": {
|
||||||
"version": "8.5.5",
|
"version": "8.5.5",
|
||||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-8.5.5.tgz",
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-8.5.5.tgz",
|
||||||
@ -5202,12 +5211,20 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"eslint-plugin-mocha": {
|
"eslint-plugin-mocha": {
|
||||||
"version": "4.11.0",
|
"version": "5.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-4.11.0.tgz",
|
"resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-5.0.0.tgz",
|
||||||
"integrity": "sha1-kRk6L1XiCl41l0BUoAidMBmO5Xg=",
|
"integrity": "sha512-mpRWWsjxRco2bY4qE5DL8SmGoVF0Onb6DZrbgOjFoNo1YNN299K2voIozd8Kce3qC/neWNr2XF27E1ZDMl1yZg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"ramda": "0.24.1"
|
"ramda": "0.25.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"ramda": {
|
||||||
|
"version": "0.25.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ramda/-/ramda-0.25.0.tgz",
|
||||||
|
"integrity": "sha512-GXpfrYVPwx3K7RQ6aYT8KPS8XViSXUVJT1ONhoKPE9VAleW42YE+U+8VEyGWt41EnEQW7gwecYJriTI0pKoecQ==",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"eslint-plugin-react": {
|
"eslint-plugin-react": {
|
||||||
@ -6090,12 +6107,12 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ethjs-query": {
|
"ethjs-query": {
|
||||||
"version": "0.3.2",
|
"version": "0.3.4",
|
||||||
"resolved": "https://registry.npmjs.org/ethjs-query/-/ethjs-query-0.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/ethjs-query/-/ethjs-query-0.3.4.tgz",
|
||||||
"integrity": "sha1-9IikjOGZTNTHfsy3tSkCxvKc/YU=",
|
"integrity": "sha512-RkeLtBwuXJkBIf/U+Az0GOT203UiBLmN7WA6WZIwSTbmhH2yNicggwaWKvN3TOtpErOsXnzYTZp82mElHdORUQ==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"ethjs-format": "0.2.4",
|
"ethjs-format": "0.2.5",
|
||||||
"ethjs-rpc": "0.1.8"
|
"ethjs-rpc": "0.1.9"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"bn.js": {
|
"bn.js": {
|
||||||
@ -6104,12 +6121,12 @@
|
|||||||
"integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU="
|
"integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU="
|
||||||
},
|
},
|
||||||
"ethjs-format": {
|
"ethjs-format": {
|
||||||
"version": "0.2.4",
|
"version": "0.2.5",
|
||||||
"resolved": "https://registry.npmjs.org/ethjs-format/-/ethjs-format-0.2.4.tgz",
|
"resolved": "https://registry.npmjs.org/ethjs-format/-/ethjs-format-0.2.5.tgz",
|
||||||
"integrity": "sha1-W7vESlrSTmirOTMS/5A5pztlv4E=",
|
"integrity": "sha1-RPMKvuF7B01xYtLIhqv/0GWCiSU=",
|
||||||
"requires": {
|
"requires": {
|
||||||
"bn.js": "4.11.6",
|
"bn.js": "4.11.6",
|
||||||
"ethjs-schema": "0.1.9",
|
"ethjs-schema": "0.2.0",
|
||||||
"ethjs-util": "0.1.3",
|
"ethjs-util": "0.1.3",
|
||||||
"is-hex-prefixed": "1.0.0",
|
"is-hex-prefixed": "1.0.0",
|
||||||
"number-to-bn": "1.7.0",
|
"number-to-bn": "1.7.0",
|
||||||
@ -6117,9 +6134,14 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ethjs-rpc": {
|
"ethjs-rpc": {
|
||||||
"version": "0.1.8",
|
"version": "0.1.9",
|
||||||
"resolved": "https://registry.npmjs.org/ethjs-rpc/-/ethjs-rpc-0.1.8.tgz",
|
"resolved": "https://registry.npmjs.org/ethjs-rpc/-/ethjs-rpc-0.1.9.tgz",
|
||||||
"integrity": "sha1-FnZ0DkHHIoGWpxGJ0z8VychbWZ0="
|
"integrity": "sha512-KJqT7cgTeCJQ2RY1AlVmTZVnKIUXMPg+niPN5VJKwRSzpjgfr3LTVHlGbkRCqZtOMDi0ogB2vHZaRQiZBXZTUg=="
|
||||||
|
},
|
||||||
|
"ethjs-schema": {
|
||||||
|
"version": "0.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ethjs-schema/-/ethjs-schema-0.2.0.tgz",
|
||||||
|
"integrity": "sha1-B7RtT1W3kqhGyQp58zDTHREsyjg="
|
||||||
},
|
},
|
||||||
"ethjs-util": {
|
"ethjs-util": {
|
||||||
"version": "0.1.3",
|
"version": "0.1.3",
|
||||||
@ -12459,9 +12481,9 @@
|
|||||||
"integrity": "sha1-rgyqVhERSYxboTcj1vtjHSQAOTQ="
|
"integrity": "sha1-rgyqVhERSYxboTcj1vtjHSQAOTQ="
|
||||||
},
|
},
|
||||||
"lolex": {
|
"lolex": {
|
||||||
"version": "2.3.1",
|
"version": "2.3.2",
|
||||||
"resolved": "https://registry.npmjs.org/lolex/-/lolex-2.3.1.tgz",
|
"resolved": "https://registry.npmjs.org/lolex/-/lolex-2.3.2.tgz",
|
||||||
"integrity": "sha512-mQuW55GhduF3ppo+ZRUTz1PRjEh1hS5BbqU7d8D0ez2OKxHDod7StPPeAVKisZR5aLkHZjdGWSL42LSONUJsZw==",
|
"integrity": "sha512-A5pN2tkFj7H0dGIAM6MFvHKMJcPnjZsOMvR7ujCjfgW5TbV6H9vb1PgxLtHvjqNZTHsUolz+6/WEO0N1xNx2ng==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"longest": {
|
"longest": {
|
||||||
@ -13646,14 +13668,14 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"nise": {
|
"nise": {
|
||||||
"version": "1.2.0",
|
"version": "1.3.2",
|
||||||
"resolved": "https://registry.npmjs.org/nise/-/nise-1.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/nise/-/nise-1.3.2.tgz",
|
||||||
"integrity": "sha512-q9jXh3UNsMV28KeqI43ILz5+c3l+RiNW8mhurEwCKckuHQbL+hTJIKKTiUlCPKlgQ/OukFvSnKB/Jk3+sFbkGA==",
|
"integrity": "sha512-KPKb+wvETBiwb4eTwtR/OsA2+iijXP+VnlSFYJo3EHjm2yjek1NWxHOUQat3i7xNLm1Bm18UA5j5Wor0yO2GtA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"formatio": "1.2.0",
|
"@sinonjs/formatio": "2.0.0",
|
||||||
"just-extend": "1.1.27",
|
"just-extend": "1.1.27",
|
||||||
"lolex": "1.6.0",
|
"lolex": "2.3.2",
|
||||||
"path-to-regexp": "1.7.0",
|
"path-to-regexp": "1.7.0",
|
||||||
"text-encoding": "0.6.4"
|
"text-encoding": "0.6.4"
|
||||||
},
|
},
|
||||||
@ -13664,12 +13686,6 @@
|
|||||||
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
|
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"lolex": {
|
|
||||||
"version": "1.6.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/lolex/-/lolex-1.6.0.tgz",
|
|
||||||
"integrity": "sha1-OpoCg0UqR9dDnnJzG54H1zhuSfY=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"path-to-regexp": {
|
"path-to-regexp": {
|
||||||
"version": "1.7.0",
|
"version": "1.7.0",
|
||||||
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz",
|
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz",
|
||||||
@ -18695,16 +18711,16 @@
|
|||||||
"integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
|
"integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
|
||||||
},
|
},
|
||||||
"sinon": {
|
"sinon": {
|
||||||
"version": "4.1.3",
|
"version": "5.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/sinon/-/sinon-4.1.3.tgz",
|
"resolved": "https://registry.npmjs.org/sinon/-/sinon-5.0.0.tgz",
|
||||||
"integrity": "sha512-c7u0ZuvBRX1eXuB4jN3BRCAOGiUTlM8SE3TxbJHrNiHUKL7wonujMOB6Fi1gQc00U91IscFORQHDga/eccqpbw==",
|
"integrity": "sha512-dMX7ZB2E1iQ5DOEOePoNJQp03uyhdMfb+kLXlNPbquv2FwfezD+0GbbHSgCw4MFhpSSS9NMoYJfOPMjCMJtXWA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"diff": "3.3.1",
|
"diff": "3.3.1",
|
||||||
"formatio": "1.2.0",
|
"formatio": "1.2.0",
|
||||||
"lodash.get": "4.4.2",
|
"lodash.get": "4.4.2",
|
||||||
"lolex": "2.3.1",
|
"lolex": "2.3.2",
|
||||||
"nise": "1.2.0",
|
"nise": "1.3.2",
|
||||||
"supports-color": "4.5.0",
|
"supports-color": "4.5.0",
|
||||||
"type-detect": "4.0.5"
|
"type-detect": "4.0.5"
|
||||||
},
|
},
|
||||||
|
@ -109,7 +109,7 @@
|
|||||||
"ethjs": "^0.2.8",
|
"ethjs": "^0.2.8",
|
||||||
"ethjs-contract": "^0.1.9",
|
"ethjs-contract": "^0.1.9",
|
||||||
"ethjs-ens": "^2.0.0",
|
"ethjs-ens": "^2.0.0",
|
||||||
"ethjs-query": "^0.3.1",
|
"ethjs-query": "^0.3.4",
|
||||||
"express": "^4.15.5",
|
"express": "^4.15.5",
|
||||||
"extension-link-enabler": "^1.0.0",
|
"extension-link-enabler": "^1.0.0",
|
||||||
"extensionizer": "^1.0.0",
|
"extensionizer": "^1.0.0",
|
||||||
@ -144,6 +144,7 @@
|
|||||||
"obs-store": "^3.0.0",
|
"obs-store": "^3.0.0",
|
||||||
"once": "^1.3.3",
|
"once": "^1.3.3",
|
||||||
"percentile": "^1.2.0",
|
"percentile": "^1.2.0",
|
||||||
|
"pify": "^3.0.0",
|
||||||
"ping-pong-stream": "^1.0.0",
|
"ping-pong-stream": "^1.0.0",
|
||||||
"pojo-migrator": "^2.1.0",
|
"pojo-migrator": "^2.1.0",
|
||||||
"polyfill-crypto.getrandomvalues": "^1.0.0",
|
"polyfill-crypto.getrandomvalues": "^1.0.0",
|
||||||
@ -151,7 +152,6 @@
|
|||||||
"promise-filter": "^1.1.0",
|
"promise-filter": "^1.1.0",
|
||||||
"promise-to-callback": "^1.0.0",
|
"promise-to-callback": "^1.0.0",
|
||||||
"pump": "^3.0.0",
|
"pump": "^3.0.0",
|
||||||
"pify": "^3.0.0",
|
|
||||||
"pumpify": "^1.3.4",
|
"pumpify": "^1.3.4",
|
||||||
"qrcode-npm": "0.0.3",
|
"qrcode-npm": "0.0.3",
|
||||||
"ramda": "^0.24.1",
|
"ramda": "^0.24.1",
|
||||||
|
@ -49,12 +49,14 @@ describe('Metamask popup page', function () {
|
|||||||
const privacy = await driver.findElement(By.css('.terms-header')).getText()
|
const privacy = await driver.findElement(By.css('.terms-header')).getText()
|
||||||
assert.equal(privacy, 'PRIVACY NOTICE', 'shows privacy notice')
|
assert.equal(privacy, 'PRIVACY NOTICE', 'shows privacy notice')
|
||||||
driver.findElement(By.css('button')).click()
|
driver.findElement(By.css('button')).click()
|
||||||
|
await delay(300)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should show terms of use', async () => {
|
it('should show terms of use', async () => {
|
||||||
await delay(300)
|
await delay(300)
|
||||||
const terms = await driver.findElement(By.css('.terms-header')).getText()
|
const terms = await driver.findElement(By.css('.terms-header')).getText()
|
||||||
assert.equal(terms, 'TERMS OF USE', 'shows terms of use')
|
assert.equal(terms, 'TERMS OF USE', 'shows terms of use')
|
||||||
|
await delay(300)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should be unable to continue without scolling throught the terms of use', async () => {
|
it('should be unable to continue without scolling throught the terms of use', async () => {
|
||||||
@ -64,6 +66,7 @@ describe('Metamask popup page', function () {
|
|||||||
'Attributions'
|
'Attributions'
|
||||||
))
|
))
|
||||||
await driver.executeScript('arguments[0].scrollIntoView(true)', element)
|
await driver.executeScript('arguments[0].scrollIntoView(true)', element)
|
||||||
|
await delay(300)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should be able to continue when scrolled to the bottom of terms of use', async () => {
|
it('should be able to continue when scrolled to the bottom of terms of use', async () => {
|
||||||
@ -72,10 +75,10 @@ describe('Metamask popup page', function () {
|
|||||||
await delay(500)
|
await delay(500)
|
||||||
assert.equal(buttonEnabled, true, 'enabled continue button')
|
assert.equal(buttonEnabled, true, 'enabled continue button')
|
||||||
await button.click()
|
await button.click()
|
||||||
|
await delay(300)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should accept password with length of eight', async () => {
|
it('should accept password with length of eight', async () => {
|
||||||
await delay(300)
|
|
||||||
const passwordBox = await driver.findElement(By.id('password-box'))
|
const passwordBox = await driver.findElement(By.id('password-box'))
|
||||||
const passwordBoxConfirm = await driver.findElement(By.id('password-box-confirm'))
|
const passwordBoxConfirm = await driver.findElement(By.id('password-box-confirm'))
|
||||||
const button = driver.findElement(By.css('button'))
|
const button = driver.findElement(By.css('button'))
|
||||||
@ -91,10 +94,10 @@ describe('Metamask popup page', function () {
|
|||||||
this.seedPhase = await driver.findElement(By.css('.twelve-word-phrase')).getText()
|
this.seedPhase = await driver.findElement(By.css('.twelve-word-phrase')).getText()
|
||||||
const continueAfterSeedPhrase = await driver.findElement(By.css('button'))
|
const continueAfterSeedPhrase = await driver.findElement(By.css('button'))
|
||||||
await continueAfterSeedPhrase.click()
|
await continueAfterSeedPhrase.click()
|
||||||
|
await delay(300)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should show lock account', async () => {
|
it('should show lock account', async () => {
|
||||||
await delay(300)
|
|
||||||
await driver.findElement(By.css('.sandwich-expando')).click()
|
await driver.findElement(By.css('.sandwich-expando')).click()
|
||||||
await delay(500)
|
await delay(500)
|
||||||
await driver.findElement(By.css('#app-content > div > div:nth-child(3) > span > div > li:nth-child(3)')).click()
|
await driver.findElement(By.css('#app-content > div > div:nth-child(3) > span > div > li:nth-child(3)')).click()
|
||||||
|
@ -33,6 +33,42 @@ describe('Nonce Tracker', function () {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
describe('sentry issue 476304902', function () {
|
||||||
|
beforeEach(function () {
|
||||||
|
const txGen = new MockTxGen()
|
||||||
|
pendingTxs = txGen.generate({ status: 'submitted' }, {
|
||||||
|
fromNonce: 3,
|
||||||
|
count: 29,
|
||||||
|
})
|
||||||
|
nonceTracker = generateNonceTrackerWith(pendingTxs, [], '0x3')
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should return 9', async function () {
|
||||||
|
this.timeout(15000)
|
||||||
|
const nonceLock = await nonceTracker.getNonceLock('0x7d3517b0d011698406d6e0aed8453f0be2697926')
|
||||||
|
assert.equal(nonceLock.nextNonce, '32', `nonce should be 32 got ${nonceLock.nextNonce}`)
|
||||||
|
await nonceLock.releaseLock()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('issue 3670', function () {
|
||||||
|
beforeEach(function () {
|
||||||
|
const txGen = new MockTxGen()
|
||||||
|
pendingTxs = txGen.generate({ status: 'submitted' }, {
|
||||||
|
fromNonce: 6,
|
||||||
|
count: 3,
|
||||||
|
})
|
||||||
|
nonceTracker = generateNonceTrackerWith(pendingTxs, [], '0x6')
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should return 9', async function () {
|
||||||
|
this.timeout(15000)
|
||||||
|
const nonceLock = await nonceTracker.getNonceLock('0x7d3517b0d011698406d6e0aed8453f0be2697926')
|
||||||
|
assert.equal(nonceLock.nextNonce, '9', `nonce should be 9 got ${nonceLock.nextNonce}`)
|
||||||
|
await nonceLock.releaseLock()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
describe('with no previous txs', function () {
|
describe('with no previous txs', function () {
|
||||||
beforeEach(function () {
|
beforeEach(function () {
|
||||||
nonceTracker = generateNonceTrackerWith([], [])
|
nonceTracker = generateNonceTrackerWith([], [])
|
||||||
|
Loading…
Reference in New Issue
Block a user