1

I am calling this code:

package multicall

import (
    "fmt"

    "github.com/ethereum/go-ethereum/common"
    "github.com/ethereum/go-ethereum/ethclient"
    "github.com/ethereum/go-ethereum/accounts/abi/bind"
)

var multicallContractAddress = common.HexToAddress("0x5e227AD1969Ea493B43F840cfF78d08a6fc17796")
var multicallContractEthBalanceSelector = "4d2301cc"

func GetBalances(addresses []string, ETHProviderURL string) ([]string, error) {
    ethProvider, err := ethclient.Dial(ETHProviderURL)
    if err != nil {
        panic(err)
    }
    multicallContract, err := NewMulticallCaller(multicallContractAddress, ethProvider)
    if err != nil {
        panic(err)
    }

    fmt.Println("multicallContract: ", multicallContract)

    var calls = []MulticallCall{}
    for _, address := range addresses {
        hashAddress := common.HexToHash(address)
        call := MulticallCall{multicallContractAddress, []byte("0x"+multicallContractEthBalanceSelector+hashAddress.String()[2:])}
        calls = append(calls, call)
    }

    fmt.Println(string(calls[0].CallData))

    var results []byte

    err = multicallContract.contract.Call(&bind.CallOpts{}, results, "aggregate", common.Hex2Bytes(addresses[0]))
    if err != nil {
        panic(err)
    }
    fmt.Println("Result: ", &results)
    return nil, nil
}

like this:

    multicall.GetBalances([]string{"<MY_ADDRESS>"}, "<INFURA_API_KEY>")

And it returns this error:

# github.com/mteam88/keyswarm/multicall
multicall/multicall.go:37:58: cannot use results (variable of type []byte) as type *[]interface{} in argument to multicallContract.contract.Call

It seems like results should be a specific type/interface (maybe []uint8) but I can't seem to pass it like that to the Call function.

I have tried tons of things and I can't seem to get it. My Google diving has uncovered this Why am I getting a compile error 'cannot use ... as type uint8 in argument to ...' when the parameter is an int which led me to my previous assumption.

If you -1 please comment (:

Please provide links to relevant documentation in your answer.

NOTE: https://github.com/mteam88/keyswarm/blob/multicall/multicall/multicallContract.go is the location of the defenitions of MulticallCall and other Multicall prefixed defenitions.

mteam88
  • 103
  • 1
  • 12

0 Answers0