Categorygithub.com/resdk/multicall-go
repositorypackage
0.0.8
Repository: https://github.com/resdk/multicall-go.git
Documentation: pkg.go.dev

# README

multicall-go

Minimal golang ethereum multicall implementation, inspired by https://github.com/trayvox/go-eth-multicall, add some features:

  • Support eth like chains, like polygon
  • Support batch size, split big requests into small ones

Example

client, err := ethclient.Dial("https://polygon-rpc.com/")
if err != nil {
	log.Fatal(err)
}

caller := New(client)

erc20Abi, _ := GetErc20Abi()

callData, _ := erc20Abi.Pack("symbol")

// response will keep the UserData from call
calls := []*Call{
	{
		Target:   common.HexToAddress("0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6"),
		CallData: callData,
		UserData: "WBTC",
	},
	{
		Target:   common.HexToAddress("0x2791bca1f2de4661ed88a30c99a7a9449aa84174"),
		CallData: callData,
		UserData: "USDC",
	},
}

results, _ := caller.Execute(calls, 10)
for _, v := range results {
	out, _ := erc20Abi.Unpack("symbol", v.ReturnData)
	assert.Equal(t, v.UserData.(string), out[0])
}