eth_createAccessList
curl --request POST \
--url https://monad-testnet.core.chainstack.com/9c5b265f20b3ea5df4f54f70eb74b800/ \
--header 'Content-Type: application/json' \
--data '
{
"id": 1,
"jsonrpc": "2.0",
"method": "eth_createAccessList",
"params": [
{
"to": "0x0000000000000000000000000000000000000000",
"data": "0x"
},
"latest"
]
}
'import requests
url = "https://monad-testnet.core.chainstack.com/9c5b265f20b3ea5df4f54f70eb74b800/"
payload = {
"id": 1,
"jsonrpc": "2.0",
"method": "eth_createAccessList",
"params": [
{
"to": "0x0000000000000000000000000000000000000000",
"data": "0x"
},
"latest"
]
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
id: 1,
jsonrpc: '2.0',
method: 'eth_createAccessList',
params: [{to: '0x0000000000000000000000000000000000000000', data: '0x'}, 'latest']
})
};
fetch('https://monad-testnet.core.chainstack.com/9c5b265f20b3ea5df4f54f70eb74b800/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://monad-testnet.core.chainstack.com/9c5b265f20b3ea5df4f54f70eb74b800/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'id' => 1,
'jsonrpc' => '2.0',
'method' => 'eth_createAccessList',
'params' => [
[
'to' => '0x0000000000000000000000000000000000000000',
'data' => '0x'
],
'latest'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://monad-testnet.core.chainstack.com/9c5b265f20b3ea5df4f54f70eb74b800/"
payload := strings.NewReader("{\n \"id\": 1,\n \"jsonrpc\": \"2.0\",\n \"method\": \"eth_createAccessList\",\n \"params\": [\n {\n \"to\": \"0x0000000000000000000000000000000000000000\",\n \"data\": \"0x\"\n },\n \"latest\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://monad-testnet.core.chainstack.com/9c5b265f20b3ea5df4f54f70eb74b800/")
.header("Content-Type", "application/json")
.body("{\n \"id\": 1,\n \"jsonrpc\": \"2.0\",\n \"method\": \"eth_createAccessList\",\n \"params\": [\n {\n \"to\": \"0x0000000000000000000000000000000000000000\",\n \"data\": \"0x\"\n },\n \"latest\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://monad-testnet.core.chainstack.com/9c5b265f20b3ea5df4f54f70eb74b800/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"id\": 1,\n \"jsonrpc\": \"2.0\",\n \"method\": \"eth_createAccessList\",\n \"params\": [\n {\n \"to\": \"0x0000000000000000000000000000000000000000\",\n \"data\": \"0x\"\n },\n \"latest\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"jsonrpc": "<string>",
"id": 123,
"result": {}
}Monad node API
eth_createAccessList | Monad
Monad API method that creates an EIP-2930 access list for a transaction. Reference for eth_createAccessList on Monad via Chainstack.
POST
/
eth_createAccessList
curl --request POST \
--url https://monad-testnet.core.chainstack.com/9c5b265f20b3ea5df4f54f70eb74b800/ \
--header 'Content-Type: application/json' \
--data '
{
"id": 1,
"jsonrpc": "2.0",
"method": "eth_createAccessList",
"params": [
{
"to": "0x0000000000000000000000000000000000000000",
"data": "0x"
},
"latest"
]
}
'import requests
url = "https://monad-testnet.core.chainstack.com/9c5b265f20b3ea5df4f54f70eb74b800/"
payload = {
"id": 1,
"jsonrpc": "2.0",
"method": "eth_createAccessList",
"params": [
{
"to": "0x0000000000000000000000000000000000000000",
"data": "0x"
},
"latest"
]
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
id: 1,
jsonrpc: '2.0',
method: 'eth_createAccessList',
params: [{to: '0x0000000000000000000000000000000000000000', data: '0x'}, 'latest']
})
};
fetch('https://monad-testnet.core.chainstack.com/9c5b265f20b3ea5df4f54f70eb74b800/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://monad-testnet.core.chainstack.com/9c5b265f20b3ea5df4f54f70eb74b800/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'id' => 1,
'jsonrpc' => '2.0',
'method' => 'eth_createAccessList',
'params' => [
[
'to' => '0x0000000000000000000000000000000000000000',
'data' => '0x'
],
'latest'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://monad-testnet.core.chainstack.com/9c5b265f20b3ea5df4f54f70eb74b800/"
payload := strings.NewReader("{\n \"id\": 1,\n \"jsonrpc\": \"2.0\",\n \"method\": \"eth_createAccessList\",\n \"params\": [\n {\n \"to\": \"0x0000000000000000000000000000000000000000\",\n \"data\": \"0x\"\n },\n \"latest\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://monad-testnet.core.chainstack.com/9c5b265f20b3ea5df4f54f70eb74b800/")
.header("Content-Type", "application/json")
.body("{\n \"id\": 1,\n \"jsonrpc\": \"2.0\",\n \"method\": \"eth_createAccessList\",\n \"params\": [\n {\n \"to\": \"0x0000000000000000000000000000000000000000\",\n \"data\": \"0x\"\n },\n \"latest\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://monad-testnet.core.chainstack.com/9c5b265f20b3ea5df4f54f70eb74b800/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"id\": 1,\n \"jsonrpc\": \"2.0\",\n \"method\": \"eth_createAccessList\",\n \"params\": [\n {\n \"to\": \"0x0000000000000000000000000000000000000000\",\n \"data\": \"0x\"\n },\n \"latest\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"jsonrpc": "<string>",
"id": 123,
"result": {}
}Monad API method that creates an EIP-2930 access list for a transaction. This method returns a list of addresses and storage keys that the transaction will access, which can be used to reduce gas costs for subsequent executions.
When called against a block older than the latest ~128 blocks, this method is treated as an archive request (2 RUs instead of 1 RU). See request units.
Get your own node endpoint todayStart for free and get your app to production levels immediately. No credit card required.You can sign up with your GitHub, X, Google, or Microsoft account.
Parameters
object— the transaction call object:from(optional) — address the transaction is sent fromto— address the transaction is directed togas(optional) — gas provided for the callgasPrice(optional) — gas price for the callvalue(optional) — value sent with the calldata(optional) — hash of the method signature and encoded parameters
quantity|tag— the block number as a hexadecimal string, or block tag (latest,earliest,pending).
Response
result— an object containing:accessList— array of access list entries, each with:address— the address that will be accessedstorageKeys— array of storage keys that will be accessed
gasUsed— the estimated gas used with the access list
eth_createAccessList code examples
const { ethers } = require("ethers");
const provider = new ethers.JsonRpcProvider("CHAINSTACK_NODE_URL");
async function createAccessList() {
const tx = {
to: "0x...", // Contract address
data: "0x..." // Encoded function call
};
const result = await provider.send("eth_createAccessList", [tx, "latest"]);
console.log("Access list:", result.accessList);
console.log(`Estimated gas: ${parseInt(result.gasUsed, 16)}`);
}
createAccessList();
from web3 import Web3
node_url = "CHAINSTACK_NODE_URL"
web3 = Web3(Web3.HTTPProvider(node_url))
tx = {
'to': '0x...', # Contract address
'data': '0x...' # Encoded function call
}
result = web3.eth.create_access_list(tx, 'latest')
print(f'Access list: {result.accessList}')
print(f'Estimated gas: {result.gasUsed}')
Use case
A practical use case foreth_createAccessList is optimizing gas costs for complex smart contract interactions by pre-declaring the state that will be accessed, which reduces the cold access gas penalties introduced in EIP-2929.Last modified on June 22, 2026
Was this page helpful?