Вызов методов Smart Contract из golang клиента и получение ошибки: «Abi: попытка разобрать пустую строку, пока ожидаются аргументы» - PullRequest
0 голосов
/ 25 февраля 2020

Первый вопрос на платформе. Надеюсь, что кто-то может помочь, меня ударили на это в течение нескольких дней

Я получил частную сеть блокчейнов с docker контейнерами. В настоящее время пытаюсь внедрить умные контракты и вызвать методы с помощью golang клиента.

У меня есть небольшой контракт на солидность

pragma solidity >=0.4.0 <0.7.0;


contract Requirements {
    mapping (string => string) map;

    function add(uint a, uint b) public pure returns (uint) {
        return a+b;
    }

    function save(string memory key, string memory val) public {
        map[key] = val;
    }
}

И это мой код Golang, который я использую для вызова метода add в контракте.

package main

import (
    "fmt"
    "log"
    "io/ioutil"
    "math/big"

    "github.com/ethereum/go-ethereum/common"
    "github.com/ethereum/go-ethereum/ethclient"

    requirements "../contracts"
)



func main() {
    client, err := ethclient.Dial("http://localhost:8081")
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println("we have a connection")

    data, err := ioutil.ReadFile("contractAddr.data")
    if err != nil {
        fmt.Println(err)
    }

    fmt.Println("The Addr is " + string(data))

    address := common.HexToAddress(string(data))
    instance, err := requirements.NewRequirements(address, client)
    if err != nil{
        log.Fatal(err)
    }

    fmt.Printf("DEPLOYMENT ERROR 101: %v\n", err)

    res, err := instance.Add(nil, big.NewInt(1),big.NewInt(3))
    if err != nil {
        fmt.Println("Debug103 " )
        log.Fatal(err)
    }

    fmt.Println("Result is" + res.String())





}

Кажется, мои параметры верны, но я получаю сообщение об ошибке от abi. Любое объяснение, что означает сообщение об ошибке и что я должен делать? Любые советы будут полезны. Спасибо!

...