Go语言如何发送以太坊代币

在本文中,你将学习如何将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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值