Sending Transactions via the Ethereum Provider Object
Now we want to use the provider API directly in order to send a transaction. Therefor you need to call the method eth_sendTransaction with the transaction parameters. The code for use in a browser looks as follows:
<!DOCTYPE html>
<html>
<head>
<script>
window.addEventListener("load", (event)=>{
if(window.ethereum){
ethereum.request({method: 'eth_requestAccounts'}).then(function(account){
console.log("Accounts: " + account);
const transactionParameters = {
// nonce: '0x00', // is ignored by MetaMask. MetaMas sets the correct nonce itself.
// gasPrice: '0x60DB88400', // optional 26 GWei, Can be customized during transaction confirmation in MetaMask
// gas: '0x5710', // Optional customizalbe in MetaMask during confirmation
to: '0x4b8415542D49726dCd46A30DceAdBaBe73c2392E', // empty if smart contract creation
from: account[0],
value: '0x8AC7230489E80000', // 10 ETH
data: "", //optional
chainId: '0x539' // currently ignored by MetaMask Mainnet, Goerli, Sepolia, Ganache, etc.
};
ethereum.request({
method: "eth_sendTransaction",
params: [transactionParameters],
}).then((result) => {
console.log(result);
})
})
}else{
return false
}
})
</script>
</head>
<body>
<h1>Using the Provider API</h1>
The transaction is created and send to MetaMask as soon as the page has loaded.
The results are written to the console.
</body>
</html>
In the parameters, some fields are optional and some are (currently) ignored by wallets like MetaMask. MetaMask does not consider the nonce and the chain ID, for example. The (maximum) gas amount and gas price can be adjusted in MetaMask and are optional. The data field is optional, too, and depends on what the transaction is supposed to do.