Home >Backend Development >Golang >go calls new method of solidity contract

go calls new method of solidity contract

Linda Hamilton
Linda HamiltonOriginal
2024-12-31 13:34:10424browse

go calls new method of solidity contract

I was bragging in the group chat last week, bragging about the golang I wrote to call the solana contract. Some people say that they want to learn how go calls solidity. I looked at the methods of calling contracts without ABI that I posted on the link. They were written in python, ethers, and solidity, but not in golang. They can indeed be written.

People in that group said that using chatgpt will use abigen to generate go packages to call contract methods.
So I will talk about a method that does not require using abigen to generate a go package to call the contract.

I still like to use my fork version of Xiaodao, https://github.com/daog1/ethgo
Fork from,umbracle/ethgo
I won’t talk about the benefits, just read the code yourself.

At first, contract calls required the generation of abi files. Later, there was a simpler method. The earliest I saw was called

in ethers.

A Human-Readable ABI

ethers is written like this:

// A Human-Readable ABI; for interacting with the contract, we
// must include any fragment we wish to use
const abi = [
    // Read-Only Functions
    "function balanceOf(address owner) view returns (uint256)",
    "function decimals() view returns (uint8)",
    "function symbol() view returns (string)",

    // Authenticated Functions
    "function transfer(address to, uint amount) returns (bool)",

    // Events
    "event Transfer(address indexed from, address indexed to, uint amount)"
];

// This can be an address or an ENS name
const address = "0x70ff5c5B1Ad0533eAA5489e0D5Ea01485d530674";

// Read-Only; By connecting to a Provider, allows:
// - Any constant function
// - Querying Filters
// - Populating Unsigned Transactions for non-constant methods
// - Estimating Gas for non-constant (as an anonymous sender)
// - Static Calling non-constant methods (as anonymous sender)
const erc20 = new ethers.Contract(address, abi, provider);

// Read-Write; By connecting to a Signer, allows:
// - Everything from Read-Only (except as Signer, not anonymous)
// - Sending transactions for non-constant functions
const erc20_rw = new ethers.Contract(address, abi, signer);

ethgo is a bit like forking ethers, so it also supports Human-Readable ABI.
The code is written like this

package main

import (
    "fmt"
    "math/big"

    "github.com/umbracle/ethgo"
    "github.com/umbracle/ethgo/abi"
    "github.com/umbracle/ethgo/contract"
    "github.com/umbracle/ethgo/jsonrpc"
)

func handleErr(err error) {
    if err != nil {
        panic(err)
    }
}

func main() {
    var functions = []string{
        "function totalSupply() view returns (uint256)",  //Human-Readable ABI 
    }

    abiContract, err := abi.NewABIFromList(functions)
    handleErr(err)

    // Matic token
    addr := ethgo.HexToAddress("0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0") 

    client, err := jsonrpc.NewClient("https://eth.llamarpc.com")
    handleErr(err)

    c := contract.NewContract(addr, abiContract, contract.WithJsonRPC(client.Eth()))
    res, err := c.Call("totalSupply", ethgo.Latest)  //call totalSupply
    handleErr(err)

    fmt.Printf("TotalSupply: %s", res["0"].(*big.Int))
}

The original code is here: https://github.com/daog1/ethgo/blob/main/examples/contract-call-basic.go
If you find any problems with my fork version, you can tell me.
I usually use Human-Readable ABI to call, abigen is too troublesome and easy to make mistakes.

The above is the detailed content of go calls new method of solidity contract. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn