Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
178 changes: 89 additions & 89 deletions src/rpc/calls/getBlockByHash.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,151 +7,151 @@ import { getConfigurationProperty } from "../../utils/configReader";
import { numberToHex } from "../../utils/converters/integer";
import { getLast160Bits, padHashTo64 } from "../../utils/padding";

export async function getBlockByHashHandler(request: RPCRequest): Promise<RPCResponse | RPCError>{
if(!Array.isArray(request.params)) {
return {
jsonrpc: request.jsonrpc,
id: request.id,
error: {
code: -32602,
message: 'Invalid argument, Parameter must be array',
},
}
export async function getBlockByHashHandler(request: RPCRequest): Promise<RPCResponse | RPCError> {
if (!Array.isArray(request.params)) {
return {
jsonrpc: request.jsonrpc,
id: request.id,
error: {
code: -32602,
message: 'Invalid argument, Parameter must be array',
},
}
if (request.params.length != 2) {
return {
jsonrpc: request.jsonrpc,
id: request.id,
error: {
code: -32602,
message: 'Invalid argument, Parameter length must be 2.',
},
}
}
if (request.params.length != 2) {
return {
jsonrpc: request.jsonrpc,
id: request.id,
error: {
code: -32602,
message: 'Invalid argument, Parameter length must be 2.',
},
}

/*
Alttaki blocknumber ve burasi icin ayni olabilir
latest ve pending parametre olarak gelebilir mi kontrol et ?
const params =
blockNumber === 'latest' || blockNumber === 'pending'
? [blockNumber]
: isHexString(blockNumber)
? [{ block_number: parseInt(blockNumber, 16) }]
: [{ block_number: blockNumber }]
}

/*
Alttaki blocknumber ve burasi icin ayni olabilir
latest ve pending parametre olarak gelebilir mi kontrol et ?
const params =
blockNumber === 'latest' || blockNumber === 'pending'
? [blockNumber]
: isHexString(blockNumber)
? [{ block_number: parseInt(blockNumber, 16) }]
: [{ block_number: blockNumber }]

*/
*/

const blockHash = request.params[0] as string;
const txDetails = request.params[1] as boolean;
const blockHash = request.params[0] as string;
const txDetails = request.params[1] as boolean;

const parameter = isHexString(blockHash) ? [{ block_hash: blockHash }] : [blockHash === "latest" ? blockHash : "pending"]
const parameter = isHexString(blockHash) ? [{ block_hash: blockHash }] : [blockHash === "latest" ? blockHash : "pending"]

let blockData;
let blockData;

if (txDetails == false) {
const response = await callStarknet({
jsonrpc: request.jsonrpc,
method: 'starknet_getBlockWithTxHashes',
params: parameter,
id: request.id,
})

if(txDetails == false) {
const response = await callStarknet({
if (isStarknetRPCError(response)) {
return <RPCError>{
jsonrpc: request.jsonrpc,
method: 'starknet_getBlockWithTxHashes',
params: parameter,
id: request.id,
})

if(isStarknetRPCError(response)) {
return <RPCError>{
jsonrpc: request.jsonrpc,
id: request.id,
error: response,
}
error: response,
}
}

blockData = response.result;
} else {
const response = await callStarknet({
blockData = response.result;
} else {
const response = await callStarknet({
jsonrpc: request.jsonrpc,
method: 'starknet_getBlockWithTxs',
params: [{ block_hash: blockHash }],
id: request.id,
})

if (isStarknetRPCError(response)) {
return <RPCError>{
jsonrpc: request.jsonrpc,
method: 'starknet_getBlockWithTxs',
params: [{ block_hash: blockHash }],
id: request.id,
})

if(isStarknetRPCError(response)) {
return <RPCError>{
jsonrpc: request.jsonrpc,
id: request.id,
error: response,
}
error: response,
}
blockData = response.result;
}
blockData = response.result;
}

return parseBlockData(request, blockData, txDetails);
return parseBlockData(request, blockData, txDetails);
}

export function parseBlockData(request: RPCRequest, starknetData: any, txDetails: boolean): RPCResponse {
const baseFeePerGas = starknetData.l1_gas_price?.price_in_wei ?? '0x0';
if(!txDetails) {
if (!txDetails) {
const txList = starknetData.transactions;
return <RPCResponse> {
return <RPCResponse>{
jsonrpc: request.jsonrpc,
id: request.id,
result : {
result: {
baseFeePerGas: baseFeePerGas, // Calculate from l1_gas_price
blobGasUsed: "0xa0000", // use value like this
blobGasUsed: "0x60000", // use value like this
difficulty: "0x0", // this value ok
excessBlobGas: "0x1300000", // use value like this
excessBlobGas: "0x40000", // use value like this
extraData: "0x546974616e2028746974616e6275696c6465722e78797a29", //??
gasLimit: "0x223b56f", // maximum gas allowed in this block. Must be higher than 21000
gasUsed: "0xef2614", // Sum of gas used in transactions
gasLimit: "0x2ad4e1b", // maximum gas allowed in this block. Must be higher than 21000
gasUsed: "0x1287e57", // Sum of gas used in transactions
hash: padHashTo64(starknetData.block_hash), // block_hash
logsBloom: "0xddf9f4006dd134869302a254c431b1d9ebd98ef2984794233f4d226865e6ce4f0db237e5b8df5537c9f75be64e1aafbe8f61dd699e51fab11561b6e8102e81445c64fd1e1bf38eea7b5b41785a52f8f8d86d95bf3566aa306397d4f7bb6e34071c6061498b7a38ae3006e42aa909ac43b23f85423d004dd8dfc665f60fbf63272c67c27914800319a0cc6d7c0bfe59244de9fd7de733364d4c61eee6d3337fe2cb074d62cff178962bda55ff5d81ec5a24c8ce922accd4d9976a8dd23c4ac6d029c2bf66d0af747323667fbac1e07804c7e7274c9620067427cf736a2a0a68c3243ae6c1b3e5c8c888fd9eb8bce1d8d31cbdc955dffeacf4734ba85e2088f7cb",
logsBloom: "0x8ff5c7f3ed5369eb783b6e19ca6dfd1d9fb0e4701e16fa7806a50b71f6fe8fb39b5d4bb66ffd608e5377bbc1bf9ff7ffeebd9fff9edfa99dfbbe77dda5ff68d7dd4cf9dd366dbbaa7f3be6dbc07fecf3f1df37f573773d7999f97ef7da62b867d75f28be8ffe227e6d26d3b6ac3b5e7bb3aba4623cf59fdd7bc06f1f3bab147d1fe8abdbd7b6fd7ee5eb9767ee33b9eede077e71e7ddb1caefb167d775f7663ebef9f1ffbedf3a763b57b5e6feefbedca5f67effc9d77d663e595636ff2b7feffeda5adf4b50efcaaedb1e77fffd78bdd26f3e5f372f9fd19ece7183ebf4a75bbfbb7c6aebf84f66f0e6cecda7cb6dcf8779aca9e3fa72e558a1ba7e54f976ef",
miner: getLast160Bits(starknetData.sequencer_address), // sequencer_address but in eth format
mixHash: "0xf89d2f938507b1113a61c12bc04baf572ba97386b7283861edaca8308d77b5a3", // ??
mixHash: "0x91eb7c2391a1186eb62e36f389a61333fcf46700d691f641548aaa4cce9d84e5", // ??
nonce: "0x0000000000000000", // always zero after pow
number: numberToHex(starknetData.block_number), // block_number
parentBeaconBlockRoot: padHashTo64(starknetData.new_root), // maybe parent_hash again?
parentHash: padHashTo64(starknetData.parent_hash), // parent_hash
receiptsRoot: padHashTo64(starknetData.new_root),
sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", // ??
size: "0x14fa4", // Blocks size in bytes. Random value but non zero will work for sn
size: "0x1b736", // Blocks size in bytes. Random value but non zero will work for sn
stateRoot: padHashTo64(starknetData.new_root), // new_root
timestamp: numberToHex(starknetData.timestamp), // timestamp but in hex
transactions: txList, // Only return tx hashes
transactionsRoot: "0xeb565bb82a7fde4c8afbc83a68d2319ab2b27461d42b8748bcef5c8ffadc6b70",
transactionsRoot: "0xc00f25d59d5698d341d492876705c5810ddaac56ee81d683a7e911b4d63bdafe",
uncles: [],
withdrawals: [],
withdrawalsRoot: "0x1ef8c90ee7db9bc4929abdb8e6062dbcb7971d7ef02306ba72f0a61872ed493f"
withdrawalsRoot: "0xd508086310ca9344eec43a7e56dc362675ed3436ee5b1e6a060a9c0df81b4c5d"
}
}
} else {
const txList = starknetData.transactions.map((tx: any) => createTxObject(starknetData, tx));
return <RPCResponse> {
return <RPCResponse>{
jsonrpc: request.jsonrpc,
id: request.id,
result : {
result: {
baseFeePerGas: baseFeePerGas, // Calculate from l1_gas_price
blobGasUsed: "0xa0000", // use value like this
blobGasUsed: "0x60000", // use value like this
difficulty: "0x0", // this value ok
excessBlobGas: "0x1300000", // use value like this
excessBlobGas: "0x40000", // use value like this
extraData: "0x546974616e2028746974616e6275696c6465722e78797a29", //??
gasLimit: "0x223b56f", // maximum gas allowed in this block. Must be higher than 21000
gasUsed: "0xef2614", // Sum of gas used in transactions
gasLimit: "0x2ad4e1b", // maximum gas allowed in this block. Must be higher than 21000
gasUsed: "0x1287e57", // Sum of gas used in transactions
hash: padHashTo64(starknetData.block_hash), // block_hash
logsBloom: "0xddf9f4006dd134869302a254c431b1d9ebd98ef2984794233f4d226865e6ce4f0db237e5b8df5537c9f75be64e1aafbe8f61dd699e51fab11561b6e8102e81445c64fd1e1bf38eea7b5b41785a52f8f8d86d95bf3566aa306397d4f7bb6e34071c6061498b7a38ae3006e42aa909ac43b23f85423d004dd8dfc665f60fbf63272c67c27914800319a0cc6d7c0bfe59244de9fd7de733364d4c61eee6d3337fe2cb074d62cff178962bda55ff5d81ec5a24c8ce922accd4d9976a8dd23c4ac6d029c2bf66d0af747323667fbac1e07804c7e7274c9620067427cf736a2a0a68c3243ae6c1b3e5c8c888fd9eb8bce1d8d31cbdc955dffeacf4734ba85e2088f7cb",
logsBloom: "0x8ff5c7f3ed5369eb783b6e19ca6dfd1d9fb0e4701e16fa7806a50b71f6fe8fb39b5d4bb66ffd608e5377bbc1bf9ff7ffeebd9fff9edfa99dfbbe77dda5ff68d7dd4cf9dd366dbbaa7f3be6dbc07fecf3f1df37f573773d7999f97ef7da62b867d75f28be8ffe227e6d26d3b6ac3b5e7bb3aba4623cf59fdd7bc06f1f3bab147d1fe8abdbd7b6fd7ee5eb9767ee33b9eede077e71e7ddb1caefb167d775f7663ebef9f1ffbedf3a763b57b5e6feefbedca5f67effc9d77d663e595636ff2b7feffeda5adf4b50efcaaedb1e77fffd78bdd26f3e5f372f9fd19ece7183ebf4a75bbfbb7c6aebf84f66f0e6cecda7cb6dcf8779aca9e3fa72e558a1ba7e54f976ef",
miner: getLast160Bits(starknetData.sequencer_address), // sequencer_address but in eth format
mixHash: "0xf89d2f938507b1113a61c12bc04baf572ba97386b7283861edaca8308d77b5a3", // ??
mixHash: "0x91eb7c2391a1186eb62e36f389a61333fcf46700d691f641548aaa4cce9d84e5", // ??
nonce: "0x0000000000000000", // always zero after pow
number: numberToHex(starknetData.block_number), // block_number
parentBeaconBlockRoot: padHashTo64(starknetData.new_root), // maybe parent_hash again?
parentHash: padHashTo64(starknetData.parent_hash), // parent_hash
receiptsRoot: padHashTo64(starknetData.new_root),
sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", // ??
size: "0x14fa4", // Blocks size in bytes. Random value but non zero will work for sn
size: "0x1b736", // Blocks size in bytes. Random value but non zero will work for sn
stateRoot: padHashTo64(starknetData.new_root), // new_root
timestamp: numberToHex(starknetData.timestamp), // timestamp but in hex
transactions: txList, // Only return tx hashes
transactionsRoot: "0xeb565bb82a7fde4c8afbc83a68d2319ab2b27461d42b8748bcef5c8ffadc6b70",
transactionsRoot: "0xc00f25d59d5698d341d492876705c5810ddaac56ee81d683a7e911b4d63bdafe",
uncles: [],
withdrawals: [],
withdrawalsRoot: "0x1ef8c90ee7db9bc4929abdb8e6062dbcb7971d7ef02306ba72f0a61872ed493f"
withdrawalsRoot: "0xd508086310ca9344eec43a7e56dc362675ed3436ee5b1e6a060a9c0df81b4c5d"
}
}
}
Expand All @@ -165,15 +165,15 @@ function createTxObject(starknetData: any, tx: any): any {
return {
blockHash: padHashTo64(starknetData.block_hash),
blockNumber: numberToHex(starknetData.block_number),
from: getLast160Bits(starknetData.sender_address), // TODO: We cant fetch registry for each tx so this is temp solution here
from: getLast160Bits(tx.sender_address), // TODO: We cant fetch registry for each tx so this is temp solution here
gas: gas,
gasPrice: "0x8e2a40e26",
maxPriorityFeePerGas: "0x8e2a40e26",
maxFeePerGas: "0x8e2a40e26",
maxPriorityFeePerGas: tx.resource_bounds.l2_gas.max_amount,
maxFeePerGas: tx.resource_bounds.l2_gas.max_price_per_unit,
hash: padHashTo64(tx.transaction_hash),
input: "0x389dba8c048cafcb6ce0729fb63f303b96ed3908475667a14cd337828323d0c",
input: "0x0", // We cant parse starknet calldata now. So we return 0x0 here.
nonce: tx.nonce,
to: getLast160Bits(starknetData.sender_address), // TODO: We cant parse starknet calldata now. So we return sender address here.
to: getLast160Bits(tx.sender_address), // TODO: We cant parse starknet calldata now. So we return sender address here.
transactionIndex: "0x0",
value: "0x0",
type: "0x2", // All txs returned as eip1559 by default. In further we may match with sn versions.
Expand Down
Loading