在本文中,你将学习如何将ETH从一个帐户转移到另一个帐户。如果你已经熟悉以太坊,那么你就知道交易包括你发送的以太币量,gas限额,gas价格,随机数,接收地址以及可选数据。在将他被广播到网络之前,必须使用发送方的私钥对该交易进行签名。
假设你已经连接了客户端,下一步就是加载你的私钥。
privateKey, err := crypto.HexToECDSA("fad9c8855b740a0b7ed4c221dbad0f33a83a49cad6b3fe8d5817ac83d38b6a19")
if err != nil {
log.Fatal(err)
}
之后我们需要获得帐户nonce
。每笔交易都需要一个nonce
。根据定义,nonce
是仅使用一次的数字。如果是发送交易的新帐户,则nonce
将为0。来自帐户的每个新交易必须具有前一个nonce
增加1的nonce
。很难保持所有nonce
的手动跟踪,以便ethereum客户端提供辅助方法PendingNonceAt
将返回你应该使用的下一个nonce
。
该函数需要我们发送的帐户的公共地址,我们可以从私钥中获取该帐户。
publicKey := privateKey.Public()
publicKeyECDSA, ok := publicKey.(*ecdsa.PublicKey)
if !ok {
log.Fatal("cannot assert type: publicKey is not of type *ecdsa.PublicKey")
}
fromAddress := crypto.PubkeyToAddress(*publicKeyECDSA)
这里,privateKey.Public()
返回包含我们的公钥的接口。我们使用publicKey
。(<expectedType>)
执行类型断言,以明确设置publicKey
变量的类型,并将其分配给publicKeyECDSA
。这允许我们在程序期望输入*ecdsa.PublicKey
类型的地方使用它。
现在我们可以读取我们应该用于帐户交易的随机数。
nonce, err := client.PendingNonceAt(context.Background(), fromAddress)
if err != nil {
log.Fatal(err)
}
下一步是设置我们将要转移的ETH数量。但是我们必须将以太网转换为wei,因为这是以太坊区块链使用的。以太网支持最多18个小数位,因此1个ETH为1加18个零。这里有一个小工具可以帮助你在ETH和wei之间进行转换:https://etherconverter.online
value := big.NewInt(1000000000000000000) // in wei (1 eth)
标准ETH转移的gas限制为21000
单位。
gasLimit := uint64(21000) // in units
gas价格必须在wei中设定。在撰写本文时,将在一个区块中包含相当快的交易的gas价格为30gwei。
gasPrice := big.NewInt(30000000000) // in we