【问题标题】:Web3j: buying a tokenWeb3j:购买代币
【发布时间】:2018-09-12 20:52:53
【问题描述】:

如果我的区块链上有 ERC20 合约,并且用户想要购买代币,如下所示:

  1. 用户给出了他们想购买的代币数量
  2. 将弹出一个信息框,向用户显示他们将支付多少以太币以及余额
  3. 确认后,应显示余额中的代币数量

要获得代币,我必须调用智能合约中的一个方法,如下所示。 obtainTok(BigInteger weiValue)

这个场景下使用web3j计算weiValue的公式是什么?

编辑 由于该库没有 Javadocs,因此对于初学者来说,参数并不是很清楚。

ethGetBalance(String address, DefaultBlockParameter defaultBlockParameter)

这里的地址代表钱包地址还是用户地址?

【问题讨论】:

  • 您要的是 web3j (Java) 还是 web3js (JavaScript)?
  • @AdamKipnis web3j。但我无法创建标签
  • 地址就是你想知道的以太币余额。账户地址和合约地址都可以持有以太币。如果您将所有资产都保存在钱包中,则使用钱包合约地址。

标签: blockchain ethereum web3-java


【解决方案1】:

Web3 有一个名为toWei() 的实用函数,您可以使用它来转换任何单位。

web3.utils.toWei(number [, unit])

在你的情况下:

web3.utils.toWei(ETHER_VALUE, 'ether')

文档中的更多信息:https://web3js.readthedocs.io/en/1.0/web3-utils.html#towei

【讨论】:

    【解决方案2】:

    @ReyHaynes 的答案对于 web3js 是正确的。如果您尝试在 web3j 中执行此操作,您将使用 org.web3j.utils.toWei(valueInEther, Unit.ETHER);,其中 valueInEtherStringBigDecimal

    为了扩展答案,您通常不会将以太币作为参数发送到您的智能合约 obtainTok()。您可以将其作为交易对象的一部分发送,并使用msg.value(在 Wei 中)在您的智能合约中读取它。

    【讨论】:

    • 所以不需要一个公式,比如先获取价格然后在 ethBalance 上划分它?另请检查我对问题所做的编辑。
    • 取决于你想要做什么。如果您想显示用户可以购买的最大代币数量,您可以将余额除以价格。如果您在智能合约中执行购买操作,您可以将发送到合约的金额 (msg.value) 除以价格。智能合约总是在 Wei 级别工作,但是 web3j 和 web3js 客户端 API 都可以让你在任何你想要的级别发送它。您只需要指定正确的单位。
    猜你喜欢
    • 2022-01-24
    • 1970-01-01
    • 2021-07-20
    • 2021-10-08
    • 2021-07-22
    • 1970-01-01
    • 2020-01-31
    • 2022-07-30
    • 2021-07-29
    相关资源
    最近更新 更多