以太坊私鏈,通過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
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章