主页 > imtoken国内版下载 > 使用go生成以太坊私钥并获取其地址查询余额

使用go生成以太坊私钥并获取其地址查询余额

imtoken国内版下载 2023-07-29 05:16:07

最近突然有一个想法有余额的以太坊私钥,就是我们能不能用电脑随机生成的以太坊私钥来碰撞,运气好的话可以用余额拿到以太坊地址的私钥。 虽然机会很小有余额的以太坊私钥,但还是可以试试

总体思路是这样的

1、先随机生成私钥,再通过私钥生成公钥,再生成地址。

2.通过api向服务商请求生成的地址,获取相应的余额。 如果大于0,则在本地保存当前地址和对应的私钥和余额。 写入本地文件

废话不多说,直接上代码,

package main
import (
	"fmt"
	"os"
	"math/big"
	"log"
	"github.com/ethereum/go-ethereum/crypto"
	"github.com/ethereum/go-ethereum/common/hexutil"
	"crypto/ecdsa"
	"net/smtp"
	"github.com/scorredoira/email"
	"net/mail"
	"github.com/ethereum/go-ethereum/rpc"
	"strconv"
)

以太坊钱包有eos_sitehqz.com 以太坊和以太坊贸易的关系_有余额的以太坊私钥

//这里我们需要定义两个回应的格式 type Info struct { From string //info.From:发件地址或账号 To string //to: 收件地址 Title string //标题 Body string //body:邮件内容 Host string //info.Host:邮件服务器地址 Password string //info.Password:密码 } var reply interface{} func main() { //GoMail("测试测试") f, err := os.OpenFile("./key.txt", os.O_WRONLY|os.O_CREATE, 0644) if err != nil { // 打开文件失败处理 fmt.Println(err) return }

有余额的以太坊私钥_sitehqz.com 以太坊和以太坊贸易的关系_以太坊钱包有eos

for i:=0;i<10;i++ { go GetBlance(f) } select { } defer f.Close() } func GetBlance(_file *os.File) { client, err := rpc.Dial("https://mainnet.infura.io/v3/XXXXXX") if err != nil { fmt.Println("错误:", err) } for ; ; { priv, addr := CreateKey() err2 := client.Call(&reply, "eth_getBalance", addr, "latest") //第一个是用来存放回复数据的格式,第二个是请求方法 if err2 != nil { fmt.Println("错误:", err2) }

以太坊钱包有eos_有余额的以太坊私钥_sitehqz.com 以太坊和以太坊贸易的关系

fmt.Println(priv, addr) //这里得到的还是16进制的需要做个进制转换成10进制 if reply != "0x0" { n := new(big.Int) n, _ = n.SetString(reply.(string)[2:], 16) //fmt.Println(n) // 查找文件末尾的偏移量 n1, _ := _file.Seek(0, 2) value,_:=strconv.ParseFloat(n.String(),64) content := "私钥为:"+priv + "\t地址为:" + addr + "\t余额为:" + strconv.FormatFloat(value/1000000000000000000,'f',5,64) + "ETH \n" GoMail(content) Infos.Body=content // 从末尾的偏移量开始写入内容 _, err = _file.WriteAt([]byte(content), n1) } } defer client.Close() } func CreateKey() (privs, addrs string) { //创建私钥

sitehqz.com 以太坊和以太坊贸易的关系_以太坊钱包有eos_有余额的以太坊私钥

privateKey, err := crypto.GenerateKey() if err != nil { log.Fatal(err) } /* //可通过此代码导入私钥 privateKey,err=crypto.HexToECDSA("93d5d04256882aaad507ff09f510969f347758109793448aa79e1b4dbe5f6efa") if err != nil { log.Fatal(err) } */ privateKeyBytes := crypto.FromECDSA(privateKey) priv := hexutil.Encode(privateKeyBytes)[2:] publicKey := privateKey.Public() publicKeyECDSA, ok := publicKey.(*ecdsa.PublicKey) if !ok { log.Fatal("cannot assert type: publicKey is not of type *ecdsa.PublicKey") } address := crypto.PubkeyToAddress(*publicKeyECDSA).Hex() //fmt.Println(address) return priv, address }

有余额的以太坊私钥_以太坊钱包有eos_sitehqz.com 以太坊和以太坊贸易的关系

var Infos=Info{ "XXXXXX@163.com",//发件邮箱 "XXXXX@qq.com",//收件邮箱 "碰撞成功", "", "smtp.163.com:25", "XXXXXX",//发件邮箱的授权码可以再邮箱后台获取 } func GoMail(body string) { m := email.NewMessage(Infos.Title, body) m.From = mail.Address{"来自我的电脑",Infos.From} m.To = []string{Infos.To} email.Send(Infos.Host, smtp.PlainAuth("", Infos.From, Infos.Password, "smtp.163.com"), m) }

我额外要求在此处发送电子邮件。 如果遇到有余额的地址,会发邮件到我的邮箱,同时保存在本地。 及时告诉我。

此外,要运行这段代码,还需要安装两个额外的库

发送电子邮件的图书馆 go getgithub.com/scorredoira/email

以太坊库去获取 github.com/ethereum/go-ethereum