Git Product home page Git Product logo

Comments (3)

joshstevens19 avatar joshstevens19 commented on September 16, 2024

can you write me a little demo script and i can debug

from ethereum-multicall.

radisa-bogdanovic avatar radisa-bogdanovic commented on September 16, 2024

Hello Josh, thank you for answering;
Here it is script

import {
Multicall,
ContractCallResults,
ContractCallContext,
} from "ethereum-multicall";
import Web3 from "web3";

import { NetworkCoinToken } from "../models/models";

export const GetFinalResultv2 = async () => {
let tokens: any[] = [
{
id: 3,
name: "BNB",
shortName: "BNB",
contractAddress: "0xb8c77482e45f1f44de1745f52c74426c631bdd52",
decimalPlaces: 18,
networkId: 2,
},
{
id: 6,
name: "Uniswap",
shortName: "UNI",
contractAddress: "0x1f9840a85d5af5bf1d1762f925bdaddc4201f984",
networkId: 2,
},
];
const walletAddress = "0xA9D1e08C7793af67e9d92fe308d5697FB81d3E43";
const contractCallContext: ContractCallContext[] = tokens.map(
(token: NetworkCoinToken) => ({
reference: token.contractAddress || "",
context: token.name,
contractAddress: token.contractAddress || "",
abi: [
{
name: "balanceOf",
type: "function",
stateMutability: "view",
inputs: [
{
name: "_owner",
type: "address",
},
],
outputs: [
{
name: "balance",
type: "uint256",
},
],
},
],
calls: [
{
reference: token.contractAddress || "",
methodName: "balanceOf",
methodParameters: [walletAddress || ""],
},
],
})
);

const multicall = new Multicall({
	tryAggregate: true,
	multicallCustomContractAddress:
		"0xcA11bde05977b3631167028862bE2a173976CA11",
	nodeUrl: "https://eth.merkle.io",
});

const getBlock = async (url: string) => {
	try {
		const web3 = new Web3(url);
		const block = await web3.eth.getBlock(14353600);

		return block;
	} catch (error: any) {
		console.log(error);
	}
};
const getData = async () => {
	let resultData: ContractCallResults | null = null;

	try {
		const numberBl = await getBlock("https://eth.merkle.io");

		resultData = await multicall.call(contractCallContext, {
			blockNumber: Number(numberBl?.number).toString(),
		});

		if (resultData) {
			const currentResult =
				resultData?.results[0]?.callsReturnContext[0]?.returnValues[0]?.hex;
			const balance = currentResult ? BigInt(currentResult).toString() : "0";
			console.log(balance);
			return resultData;
			// const balanceFormated = formatBalance(balance, numberToFormat);
		}
	} catch (error: any) {
		console.log(error);
	}
};
const finalData: any = (await getData()) || [];

console.log(finalData);

return finalData;

};
It works for me from the date when the multicall address was deployed on etherscan.
https://etherscan.io/address/0xca11bde05977b3631167028862be2a173976ca11#code

from ethereum-multicall.

radisa-bogdanovic avatar radisa-bogdanovic commented on September 16, 2024

I asked Matt from mds1 for same issue and he told me : "This is correct, you will not be able to use Multicall3 to read historical data from before Multicall3 was deployed. A workaround is to use geth's state overrides and place the Multicall3 bytecode at the expected address as part of your call." Can i somehow do workaround using this libary. And also can i provide chainId without requesting to get him from get_chainId or net_version bcs i already know wich chainId i want?

from ethereum-multicall.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.