以太坊私链,通过golang实现ETH转账、查询

1.大概流程

参考goethereumbook,通过go-ethereum包,rpc连接到简单私链上,导入A账户keystore文件,取出私钥,用于转账的签名(注意创世块的chainID),给B账户转账,在终端node1上开启挖矿,查询转账余额。
向账户B转入1.5个ETH

整个过程中自己有两个疑惑:
第一,Keystores每次操作都要NewKeyStore一个钱包,生成个新的,为啥不用原来那个继续操作?
第二,单位wei转eth的很多,eth转wei的很少,web3.js倒是有,不过用go怎么安全的转呢?

2.完整参考代码

https://gist.github.com/gaoxt/2db081dd2696669c2e3b3807155bf42a

3.根据keystore文件和密码 获取私钥和地址


// keyStoreToPrivateKey 根据keystore文件和密码 获取私钥和地址
func keyStoreToPrivateKey(privateKeyFile, password *string) (string, string, error) {
	keyJSON, err := ioutil.ReadFile(*privateKeyFile)
	if err != nil {
		fmt.Println("read keyjson file failed:", err)
	}
	unlockedKey, err := keystore.DecryptKey(keyJSON, *password)
	if err != nil {
		return "", "", err
	}
	privKey := hex.EncodeToString(unlockedKey.PrivateKey.D.Bytes())
	addr := crypto.PubkeyToAddress(unlockedKey.PrivateKey.PublicKey)

	return privKey, addr.String(), nil

}

4.eth单位安全转wei

//EthToWei eth单位安全转wei
//https://stackoverrun.com/cn/q/13021596
func EthToWei(val float64) *big.Int {
	bigval := new(big.Float)
	bigval.SetFloat64(val)
	// Set precision if required.
	// bigval.SetPrec(64)

	coin := new(big.Float)
	coin.SetInt(big.NewInt(1000000000000000000))

	bigval.Mul(bigval, coin)

	result := new(big.Int)
	bigval.Int(result) // store converted number in result

	return result
}
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值