6_load_private_key

command
v0.0.0-...-6e38dd8 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 12, 2023 License: MIT Imports: 6 Imported by: 0

README

导入钱包私钥

现在钱包管理的教程一般都是环境变量设置助记词或者私钥,程序导入使用。我这里也用这种方法来演示。

注意:生产环境中,请根据实际情况,选择更稳妥的处理方式。这里的教程仅作技术演示,不是最佳方案。

使用go-ethereum crypto包的HexToECDSA函数可以直接把16进制格式的私钥导入。

pk, err := crypto.HexToECDSA(os.Getenv("PRIVATE_KEY"))

需要注意,Go语言导入私钥与其他语言略有不同,不需要私钥之前的0x前缀。

比如anvil测试账户0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266的私钥是0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80,环境变量设置时只需要去掉0x的部分,即'ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80即可。

注意:该私钥是测试工具anvil自动生成的,全网公开,任何人都能知道,账户里没有任何资产,也千万不要在任何正式网上尝试操作该账户。

私钥读取成功后,可以使用NewKeyedTransactorWithChainID获得一个可写入的transactor,用于向区块链网络发起交易。

auth, err := bind.NewKeyedTransactorWithChainID(pk, chainId)

完整代码

package main

import (
	"context"
	"github.com/ethereum/go-ethereum/accounts/abi/bind"
	"github.com/ethereum/go-ethereum/crypto"
	"github.com/ethereum/go-ethereum/ethclient"
	"log"
	"os"
)

func main() {
	apiKey := os.Getenv("INFURA_API_KEY")
	url := "https://mainnet.infura.io/v3/" + apiKey
	client, err := ethclient.Dial(url)
	if err != nil {
		log.Fatalf("could not connect to Infura with ethclient: %s", err)
	}
	ctx := context.Background()
	chainId, err := client.ChainID(ctx)
	if err != nil {
		log.Fatalf("get chainID error: %s", err)
	}

	pk, err := crypto.HexToECDSA(os.Getenv("PRIVATE_KEY"))
	if err != nil {
		log.Fatalf("load private key error: %s", err)
	}
	log.Printf("account load success, address: %s", crypto.PubkeyToAddress(pk.PublicKey))

	auth, err := bind.NewKeyedTransactorWithChainID(pk, chainId)
	if err != nil {
		log.Fatalf("failed to create authorized transactor: %v", err)
	}

	_ = auth
}

Documentation

The Go Gopher

There is no documentation for this package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL