Ga naar de hoofdinhoud

Hoe je een transactie met een hogere gasprijs opnieuw kunt verzenden met Ethers.js

Bijgewerkt op
26 november 2025

Leestijd: 8 min.

Belangrijke mededeling

Deze handleiding bevat verwijzingen naar het Kovan-testnet, dat niet langer actief wordt onderhouden. Hoewel bepaalde stappen met betrekking tot deze keten wellicht niet meer van toepassing zijn, kan het algemene proces wel geldig zijn voor andere ketens. We raden je aan om de huidige alternatieven voor je implementatie te bekijken. Als je een bijgewerkte versie van deze handleiding wilt zien, laat het ons dan weten!

Overzicht​

Het komt wel eens voor dat je een transactie op Ethereum indient zonder voldoende gas, bijvoorbeeld vanwege netwerkcongestie of omdat er te veel transacties in de wachtrij staan die een hogere gasprijs bieden dan jij voor je transactie hebt geboden. Als je een transactie met hoge prioriteit hebt maar weinig gas, kan het zijn dat je uren of zelfs dagen moet wachten voordat de transactie wordt verwerkt. In dergelijke gevallen moet je de transactie opnieuw verzenden met meer gas en dezelfde nonce, zodat deze zo snel mogelijk wordt gemined.

In deze handleiding bespreken we alle terminologie en informatie met betrekking tot het verzenden van een transactie op Ethereum en het opnieuw verzenden van dezelfde transactie met behulp van Ethers.js op een van de testnetwerken van Ethereum.

Wat is een transactie in Ethereum?​

We voeren een transactie uit telkens wanneer we iets willen toevoegen, bijwerken of wijzigen op het Ethereum-netwerk. In feite is een transactie de manier waarop de echte wereld in contact staat met het Ethereum-blockchainnetwerk. Voor elke transactie die we op het Ethereum-netwerk uitvoeren, moeten we een vergoeding betalen die ‘gas’ wordt genoemd. Gas wordt uitgedrukt in wei (de kleinste eenheid van ETH) of in gwei.

Soorten transacties in Ethereum

Er zijn drie veelvoorkomende soorten transacties op het Ethereum-netwerk:

  1. Een gewone transactie, waarbij ETH/ether van de ene rekening naar de andere wordt overgemaakt.
  2. Een transactie waarmee een contract wordt aangemaakt, is een transactie waarbij een smart contract wordt geĂŻmplementeerd op het Ethereum-blockchainnetwerk.
  3. Een transactie waarmee een contract wordt aangeroepen; deze transactie wordt samen met bepaalde gegevens verzonden en wordt gebruikt om een eerder geĂŻmplementeerd smart contract op te vragen of ermee te communiceren.

Parameters van een typische Ethereum-transactie

  • van: Het afzenderadres, een adres van 20 bytes dat verwijst naar de rekening waarmee de transactie wordt geĂŻnitieerd.
  • naar: Het adres van de ontvanger, een adres van 20 bytes dat verwijst naar een account van de ontvanger of een contractaccount.
  • waarde: Dit is de hoeveelheid ETH die in de transactie van de ene rekening naar de andere is overgemaakt.
  • data: Dit veld bevat de bytecode voor transacties waarbij een contract wordt geĂŻmplementeerd. Voor de uitvoering van een contractfunctie bevat het een functiesignatuur en gecodeerde argumenten. Bij transacties voor het overmaken van geld is dit veld niet nodig of wordt het leeg gelaten.
  • gasLimit: Dit is het maximale bedrag in wei dat een transactie als gas mag gebruiken.
  • gasPrice: Dit is het bedrag in wei dat de afzender bereid is te betalen voor de transactie.
  • chainId: Dit is het netwerk-ID van je Ethereum-node (mainnet: 1, Rinkeby: 4, Kovan: 42, enz.)
  • nonce: Dit is het aantal transacties dat een bepaald adres verstuurt. Telkens wanneer een adres een transactie verstuurt, wordt de nonce met 1 verhoogd.

Transactiestroom in Ethereum

  • Een transactieobject aanmaken en dit voorzien van alle benodigde parameters.
  • De transactie ondertekenen met de privĂ©sleutel van de afzender.
  • De transactie via een Ethereum-node naar het Ethereum-blockchainnetwerk verzenden.

Een transactie ondertekenen

Het ondertekenen van een transactie houdt in dat er met behulp van de privĂ©sleutel van de afzender een handtekening wordt gegenereerd voor een transactieobject. Als je meer wilt weten over het ondertekenen en valideren in Ethereum, zijn hier enkele uitstekende artikelen: „Signing and Verifying Ethereum Signatures” door Yos en „Ethereum: Signing and Validating” door Angello Pozo.

Nu we een beter beeld hebben van transacties in Ethereum, gaan we er zelf eens een versturen.

Vereisten

  • NodeJS is op uw systeem geĂŻnstalleerd
  • Een teksteditor
  • Terminal, ook wel bekend als de opdrachtregel

De benodigde tools installeren.​

We gebruiken NodeJS om ons bibliotheekpakket te beheren en om met het JavaScript-bestand te werken. Om te controleren of NodeJS op je systeem is geĂŻnstalleerd, open je een terminal en voer je het volgende uit:

$ node -v

Als het nog niet is geïnstalleerd, kun je de LTS-versie van NodeJS downloaden via de officiële website.

Om een transactie te versturen, gebruiken we een kort stukje JavaScript-code en de ethers.js-bibliotheek (zorg ervoor dat het versie 5.7 is). Je kunt deze met npm installeren via de opdrachtregel/terminal:

$ npm install --save ethers@5.7

Het meest voorkomende probleem bij deze stap is een interne fout bij `node-gyp`. Je kunt hier de installatie-instructies voor node-gyp volgen.

Een ander veelvoorkomend probleem is een verouderde cache. Wis je npm-cache door simpelweg het onderstaande in je terminal in te voeren:

$ npm cache clean

Je kunt onze ethers.js-handleiding raadplegen voor meer informatie over de ethers.js-bibliotheek.

Een wallet aanmaken en wat test-ETH ontvangen​

Laten we nu een wallet voor onszelf aanmaken. Maak daarvoor eerst een bestand met de naam index.js of een JavaScript-bestand met een naam naar keuze aan. Je kunt dit kopiëren en in je code-editor plakken:

var ethers = require('ethers');  
var privateKey = "0x0111111111111111111122222222222222222223333333333333333333344445";
var wallet = new ethers.Portemonnee(privateKey);
console.log("Adres: " + portemonnee.adres);

Laten we eens kijken wat hier gebeurt: we importeren de ethers.js-bibliotheek die we eerder hebben geïnstalleerd (regel 1),  We maken een privésleutel aan die specifiek is voor onze wallet. Je moet er zelf een aanmaken; het mag elk getal zijn, maar zorg ervoor dat het hetzelfde aantal cijfers bevat als hierboven (regel 2), We maken een wallet-instantie aan met ethers met behulp van de privésleutel (regel 3), We geven ons wallet-adres weer met de tekst "Address" in de console (regel 4).

Voer het bestand nu uit met:

$ node index.js

Als alles goed gaat, zou de uitvoer in het terminalvenster er als volgt uit moeten zien:

Adres: 0x3f5D3070Fc7924479B5e367a83EC2b284E9c4e04

Aangezien voor elke transactie gas als vergoeding nodig is, en we wat gas nodig hebben om de transactie te versturen, gaan we wat test-ETH in onze wallet zetten. Hiervoor gebruiken we een Kovan-node, dus ga naar deze Kovan-faucet om wat test-ETH te krijgen, plak het walletadres dat je hebt gekregen door de bovenstaande code uit te voeren en klik op ‘send me KETH!’. 

Opmerking: Dit is test-ETH, die geen marktwaarde heeft.

Je Quicknode Ethereum-eindpunt instellen

Voor wat we vandaag gaan doen, kunnen we vrijwel elke Ethereum-client gebruiken, zoals Geth of OpenEthereum (voorheen Parity). Om zelf een Ethereum-node op te starten, moeten we eerst een client kiezen en deze configureren; het synchroniseren en onderhouden van een Ethereum-node is een uitdagende klus; het synchroniseren van een volledige Ethereum-node kan dagen duren.

Aangezien dat iets te ingewikkeld is voor het versturen van slechts één transactie, gaan we een gratis endpoint van Quicknode gebruiken om dit eenvoudig te maken. Nadat je je gratis Ethereum-endpoint hebt aangemaakt, kopieer je het endpoint van je HTTP-provider: 

Voor deze handleiding gebruiken we een Kovan-testnet-node.

Screenshot van het Quicknode Kovan-eindpunt

Je hebt dit later nog nodig, dus kopieer het en sla het op.

Een transactie verzenden en opnieuw verzenden​

We hebben nu een wallet met wat test-ETH erin. Laten we dus een transactie versturen om wat ETH over te maken naar een andere rekening/wallet. Daarvoor voegen we nog wat extra code toe aan ons index.js-bestand. Je kunt dit kopiëren en in je code-editor plakken:

var ethers = require('ethers');  
var url = 'ADD_YOUR_ETHEREUM_NODE_URL';
var customHttpProvider = new ethers.providers.JsonRpcProvider(url);
var privateKey = "0x0111111111111111111122222222222222222223333333333333333333344445";
var wallet = new ethers.Wallet(privateKey);
console.log("Address: " + wallet.address);
tx = {
to: "0x6E0d01A76C3Cf4288372a29124A26D4353EE51BE",
value: ethers.utils.parseEther("0.05"),
chainId: 42,
nonce: 3
}
customHttpProvider.estimateGas(tx).then(function(estimate) {
tx.gasLimit = estimate;
tx.gasPrice = ethers.utils.parseUnits("0.14085197", "gwei");
wallet.signTransaction(tx).then((signedTX)=>{
customHttpProvider.sendTransaction(signedTX).then(console.log);
});
});

Vervang dus `ADD_YOUR_ETHEREUM_NODE_URL` door de HTTP-provider uit het bovenstaande gedeelte. 

Een korte uitleg van de bovenstaande code: we importeren de ethers-bibliotheek die we eerder hebben geĂŻnstalleerd (regel 1), stellen de URL van onze Ethereum-node in (regel 2), maken een ethers JsonRpcProvider-instantie aan (regel 3), genereren een privĂ©sleutel die specifiek is voor onze wallet – je moet er zelf een aanmaken; het mag elk getal zijn, maar zorg ervoor dat het hetzelfde aantal cijfers bevat (regel 4), we maken een wallet-instantie aan met ethers met behulp van de privĂ©sleutel (regel 5), we geven ons walletadres weer met de tekst "Address" in de console (regel 6), we maken een transactieobject aan en voegen het 'to'-veld toe met het adres van de ontvanger – je kunt een willekeurig adres genereren met `var wallet = Wallet.createRandom();`, een 'value'-veld met de waarde van de te verzenden ETH, een 'chainId'-veld dat hier op 42 is ingesteld omdat we Kovan gebruiken, en een nonce-veld ingesteld op 3 (regel 7-12). We schatten de gasLimit via onze node en stellen de gasprijs in (regel 13-15), het transactieobject ondertekenen met de privĂ©sleutel van onze wallet en het verzenden, waarbij we de transactie ook in de console weergeven (regel 16-18).

Laten we dit eens uitvoeren:

$ node index.js

Dan krijgen we een uitvoer die er ongeveer zo uitziet:

Uitvoer van index.js in Node.js

Kopieer de tekenreeks van het hash-veld (iets als '0xe49c8122656c612bf5f1e10b251f56671acf01d831b6876c37c5a52053035642') en plak deze in het zoekvak van Kovan Etherscan om de status van de transactie te controleren. Je zult zien dat de transactie nog niet aan het nieuwe blok op de blockchain is toegevoegd en de status ‘pending’ heeft. Dat komt doordat we een aanzienlijk lage gaswaarde hebben ingevoerd.

Laten we nu eens proberen dezelfde transactie met dezelfde nonce te versturen, maar deze keer met een hogere gaswaarde; wijzig de waarde van gasPrice op regel 15 in de code van '0.14085197' naar '2.14085197' en voer de code opnieuw uit:

$ node index.js 

Kopieer de hash-string uit de nieuwe uitvoer en plak deze in het zoekveld van Kovan Etherscan om de status van de transactie te controleren. Deze keer wordt onze transactie aan het blok toegevoegd en krijgt ze de status ‘geslaagd’, omdat we haar hebben verzonden met een verhoogde, passende gasPrice-waarde.

Opmerking: Het is belangrijk om te weten dat de „nonce“-waarde voor beide transacties hetzelfde is. Zoals eerder vermeld, is de nonce een verwijzing naar het aantal transacties dat een Ethereum-adres heeft. Om een transactie met een hogere gasprijs opnieuw in te dienen, moet je dezelfde nonce gebruiken als bij de oorspronkelijke transactie. Als je een hogere nonce gebruikt, wordt dat een nieuwe transactie, waardoor je meer van je ETH uitgeeft dan je van plan was.

Conclusie​

Zoals we in het bovenstaande voorbeeld hebben gezien, moet de gasprijs van een transactie concurrerend zijn om goedgekeurd te worden. De miners van de blockchain bepalen de gasprijs op basis van de beschikbare blokruimte en wat alle transacties bereid zijn te betalen om die blokruimte in te nemen. Als er een transactie is waarvan de gasprijs onder de drempelwaarde ligt, wordt deze niet goedgekeurd. Transacties met een hogere gasprijs dan andere transacties worden snel goedgekeurd.

Schrijf je in voor onze nieuwsbrief voor meer artikelen en handleidingen over Ethereum. Als je feedback hebt, neem dan gerust contact met ons op via Twitter. En als je een vraag hebt, kun je altijd met ons chatten via onze communityserver op Discord. Daar vind je een aantal van de coolste ontwikkelaars die er zijn, bedankt :)

Deel deze gids