go - 以太坊错误 {"code":-32000 ,"message" :"unknown account"}

标签 go ethereum go-ethereum

我正在尝试使用 eth.sendTransaction 发送原始交易,但我收到一条错误消息,显示 {"code":-32000,"message":"unknown account"} 。我不确定是什么原因造成的,而且我似乎无法在互联网上找到答案。谁能帮我弄清楚?这是我的代码:

func ExecuteSignedTransaction(rawTransaction string) {
    var hash web3.Hash
    data := make(map[string]interface{})
    data["data"] = rawTransaction
    err := Web3HTTPClient.Call("eth_sendTransaction", &hash, data)

    if err != nil{
        fmt.Println(err)
        Os.Exit(1)
     }

    fmt.Println("Sent tx hash:", hash)
}

最佳答案

那么,我可能在这里做什么:

import (
  "strings"
  "crypto/ecdsa"
  "math/big"
  "github.com/ethereum/go-ethereum/ethclient"
  "github.com/ethereum/go-ethereum/crypto"
  "github.com/ethereum/go-ethereum/accounts/abi/bind"
)

var chainId = big.NewInt(1) // chain id for the ethereum mainnet, change according to needs

func ecdsaPrivateKeyFromHex(privKeyHex string) *ecdsa.PrivateKey {
  ecdsaKey, err := crypto.HexToECDSA(privKeyHex)
  if err != nil { panic(err) }

  return ecdsaKey
}

func newTransactOpts(privKey *ecdsa.PrivateKey) *bind.TransactOpts {
  transactOpts, err := bind.NewKeyedTransactorWithChainID(privKey, chainId)
  if err != nil { panic(err) }

  return transactOpts
}

func newRpcClient() *ethclient.Client {
  c, err := ethclient.Dial("insert rpc url here")
  if err != nil { panic(err) }
  
  return c
}

// note: constructing the *types.Transaction object left as 
// an exercise to the reader
func ExecuteTransaction(rawTransaction *types.Transaction) {
  privKeyHex := "0xblahblahblahblahblah" // use your own account's private key
  transactOpts := newTransactOpts(ecdsaPrivateKeyFromHex(privKeyHex))

  signedTxn, err := transactOpts.Signer(transactOpts.From, rawTransaction)
  if err != nil { panic(err) }
  
  rpcClient := newRpcClient()
  if err := rpcClient.SendTransaction(context.Background(), signedTxn); err != nil { panic(err) }

  // do whatever
}

关于go - 以太坊错误 {"code":-32000 ,"message" :"unknown account"},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69804291/

相关文章:

serialization - 如何在go中序列化/反序列化 map

javascript - Node.js:通过 unix 套接字发送 GET 请求

ethereum - 当我从 remix 部署合约时,geth 显示 "contract creation code storage out of gas"

ethereum - 如何检测以太坊区 block 链节点中的合约创建时间戳?

ethereum - 如何使用geth获取以太坊区 block 的数据

go - 使用 glide 安装 go-ethereum 依赖项和 tendermint 依赖项

string - 如何在 Go 中将 int 值转换为字符串?

go - 从私有(private) ED25519 Go 获取公钥

node.js - web3.js部署时如何获取智能合约地址

go - 不能在 func 文字的参数中使用 nil 作为类型 _Ctype_CFAllocatorRef