Blockchain Web3j:购买代币

Blockchain Web3j:购买代币,blockchain,ethereum,web3-java,Blockchain,Ethereum,Web3 Java,如果我的区块链上有一份ERC20合同,并且用户希望购买代币,如以下场景所示: 用户给出他们想要购买的代币数量 将弹出一个信息框,向用户显示他们将支付多少乙醚以及剩余余额 一旦确认,应显示余额中代币的数量 为了获得令牌,我必须调用智能合约中的一个方法,如下所示获取OK(大整数值) 在这种情况下,使用web3j计算WEI值的公式是什么 编辑 由于库中没有Javadocs,作为初学者,参数对我来说不是很清楚 ethGetBalance(String address, DefaultBlockParam

如果我的区块链上有一份ERC20合同,并且用户希望购买代币,如以下场景所示:

  • 用户给出他们想要购买的代币数量
  • 将弹出一个信息框,向用户显示他们将支付多少乙醚以及剩余余额
  • 一旦确认,应显示余额中代币的数量
  • 为了获得令牌,我必须调用智能合约中的一个方法,如下所示<代码>获取OK(大整数值)

    在这种情况下,使用web3j计算WEI值的公式是什么

    编辑 由于库中没有Javadocs,作为初学者,参数对我来说不是很清楚

    ethGetBalance(String address, DefaultBlockParameter defaultBlockParameter)
    

    此处的地址是否表示钱包地址或用户地址?

    Web3有一个名为
    toWei()
    的实用功能,您可以使用该功能从任何单元进行转换

    web3.utils.toWei(编号[,单位])

    就你而言:

    web3.utils.toWei(以太值,'ETHER')


    文档中的更多信息:

    @ReyHaynes答案适用于web3js。如果您试图在web3j中实现这一点,那么可以使用
    org.web3j.utils.toWei(valueInEther,Unit.ETHER)
    其中
    valueInEther
    字符串
    BigDecimal


    为了进一步说明答案,您通常不会将以太作为参数发送到智能合约,以
    obtainTok()
    。您可以将其作为事务对象的一部分发送进来,并在智能合约中使用
    msg.value
    (用Wei表示)。

    您要的是web3j(Java)还是web3js(JavaScript)?@AdamKipnis web3j。但我无法创建标记地址是你想知道的任何东西。帐户地址和合同地址都可以保存。如果你把所有资产都放在一个钱包里,那么你就使用钱包合同地址。所以不需要像先得到价格然后在余额上除以价格这样的公式吗?另外,请检查我对问题的编辑。这取决于你想做什么。如果您想显示用户可以购买的最大代币数量,您可以将余额除以价格。如果您在智能合约中执行购买操作,则将发送到合约的金额(msg.value)除以价格。智能合约总是在Wei级别工作,但是web3j和web3js客户端API都允许您在任何级别发送它。您只需要指定正确的单位。