Что случилось с этим кодом Голанга для подписания транзакции? Неверная ошибка v, r, s?

Итак, я больше узнаю об Ethereum, и я написал этот принцип в Go, чтобы начать взаимодействие с geth-узлами и публикацию транзакций в сети. Я получаю сообщение об ошибке:

panic: invalid transaction v, r, s values

Вот код, который я написал для отправки транзакции: https://gist.github.com/karysto /3c7c1ab9d3ae736e5c63a2bbe4c47ac2

Любая помощь приветствуется!

Обновление: Кажется, что сеть /подписчик chain id где-то неправильно установлена. Несмотря на то, что я устанавливаю chain id в 0 в цепочке, идентификатор цепочки транзакций всегда устанавливается в 9223372036854775790. Моя догадка заключается в том, что транзакция правильно подписана, но подписывается с неправильной цепочкой (выше), поэтому ошибка invalid v,r,s. Если кто-то знает способ исправить эту проблему или обнаружил, что я ошибаюсь, не стесняйтесь представить ответ!

Обновление: 29 марта 2017 г. . Я открыл на Go ethereum , объясняя эту проблему.

Проверенные версии Geth : 1.5.9 и 1.6.0-unstable

5 голосов | спросил delos 27 MarpmMon, 27 Mar 2017 23:54:02 +03002017-03-27T23:54:02+03:0011 2017, 23:54:02

2 ответа


3

Я не знаю, поможет ли это вообще, но у меня было что-то, что я написал до того, как был введен abigen. Я пытался обновить его (нет гарантии 100%)

github.com/DaveAppleton/ether_go

Возможно, это поможет

ответил Dave Appleton 29 MarpmWed, 29 Mar 2017 22:04:37 +03002017-03-29T22:04:37+03:0010 2017, 22:04:37
0

Вот полный пример того, как подписывать транзакцию и транслировать в Go (из Эфириум развития с Go книги ).

package main

import (
    "context"
    "crypto/ecdsa"
    "fmt"
    "log"
    "math/big"

    "github.com/ethereum/go-ethereum/common"
    "github.com/ethereum/go-ethereum/core/types"
    "github.com/ethereum/go-ethereum/crypto"
    "github.com/ethereum/go-ethereum/ethclient"
)

func main() {
    client, err := ethclient.Dial("https://rinkeby.infura.io")
    if err != nil {
        log.Fatal(err)
    }

    privateKey, err := crypto.HexToECDSA("fad9c8855b740a0b7ed4c221dbad0f33a83a49cad6b3fe8d5817ac83d38b6a19")
    if err != nil {
        log.Fatal(err)
    }

    publicKey := privateKey.Public()
    publicKeyECDSA, ok := publicKey.(*ecdsa.PublicKey)
    if !ok {
        log.Fatal("error casting public key to ECDSA")
    }

    fromAddress := crypto.PubkeyToAddress(*publicKeyECDSA)
    nonce, err := client.PendingNonceAt(context.Background(), fromAddress)
    if err != nil {
        log.Fatal(err)
    }

    value := big.NewInt(1000000000000000000) // in wei (1 eth)
    gasLimit := uint64(21000)                // in units
    gasPrice := big.NewInt(30000000000)      // in wei (30 gwei)

    toAddress := common.HexToAddress("0x4592d8f8d7b001e72cb26a73e4fa1806a51ac79d")
    var data []byte
    tx := types.NewTransaction(nonce, toAddress, value, gasLimit, gasPrice, data)
    signedTx, err := types.SignTx(tx, types.HomesteadSigner{}, privateKey)
    if err != nil {
        log.Fatal(err)
    }

    err = client.SendTransaction(context.Background(), signedTx)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Printf("tx sent: %s", signedTx.Hash().Hex())
}
ответил Miguel Mota 7 J0000006Europe/Moscow 2018, 22:16:36

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132