Rumah >pembangunan bahagian belakang >Golang >pergi memanggil kaedah baru kontrak kekukuhan

pergi memanggil kaedah baru kontrak kekukuhan

Linda Hamilton
Linda Hamiltonasal
2024-12-31 13:34:10418semak imbas

pergi memanggil kaedah baru kontrak kekukuhan

Saya mendabik dada dalam sembang kumpulan minggu lepas, mendabik dada tentang golang yang saya tulis untuk memanggil kontrak solana. Sesetengah orang mengatakan bahawa mereka ingin belajar bagaimana pergi memanggil kekukuhan. Saya melihat kaedah memanggil kontrak tanpa ABI yang saya siarkan pada pautan. Mereka ditulis dalam python, eter, dan kepekatan, tetapi tidak dalam golang.

Orang dalam kumpulan itu berkata bahawa menggunakan chatgpt akan menggunakan abigen untuk menjana pakej go untuk memanggil kaedah kontrak.
Jadi saya akan bercakap tentang kaedah yang tidak memerlukan penggunaan abigen untuk menjana pakej go untuk memanggil kontrak.

Saya masih suka menggunakan versi fork Xiaodao saya, https://github.com/daog1/ethgo
Garpu dari,umbracle/ethgo
Saya tidak akan bercakap tentang faedah, cuma baca kod itu sendiri.

Pada mulanya, panggilan kontrak memerlukan penjanaan fail abi Kemudian, terdapat kaedah yang lebih mudah yang saya lihat dipanggil

dalam eter.

ABI Boleh Dibaca Manusia

ether ditulis seperti ini:

// 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 agak seperti forking eter, jadi ia juga menyokong ABI Boleh Dibaca Manusia.
Kod ditulis seperti ini

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))
}

Kod asal ada di sini: https://github.com/daog1/ethgo/blob/main/examples/contract-call-basic.go
Jika anda mendapati sebarang masalah dengan versi garpu saya, anda boleh beritahu saya.
Saya biasanya menggunakan ABI Boleh Dibaca Manusia untuk memanggil, abigen terlalu menyusahkan dan mudah membuat kesilapan.

Atas ialah kandungan terperinci pergi memanggil kaedah baru kontrak kekukuhan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn