我想将erc20代币从一个账户转移到另一个账户。我知道我可以使用智能合约包装类的Transfer或transferFrom函数。但在我的情况下,erc20代币交易需要在客户端签名。并且没有办法在智能合约包装函数中传递signedTransaction。那么,如何在java中使用web3j签署erc20代币交易并执行交易。
我发现了这个类似的问题。但是,它的代码不是用java编写的。我不知道如何在ABI中编码传输函数。使用web3发送ERC20令牌
有点晚了,但也许会有人:
您可以尝试以下操作:
import org.web3j.abi.TypeReference;
import org.web3j.abi.datatypes.Address;
import org.web3j.abi.datatypes.Bool;
import org.web3j.abi.datatypes.generated.Uint256;
import org.web3j.crypto.Credentials;
import org.web3j.crypto.RawTransaction;
import org.web3j.protocol.core.methods.response.EthGetTransactionCount;
import org.web3j.utils.Convert;
import org.web3j.utils.Numeric;
import java.math.BigInteger;
import java.util.Arrays;
import java.util.Collections;
import java.util.function.Function;
// create credentials
String privateKeyHexValue = Numeric.toHexString(privateKey.data());
Credentials credentials = Credentials.create(privateKeyHexValue);
// get the next available nonce
EthGetTransactionCount ethGetTransactionCount = web3.ethGetTransactionCount(credentials.getAddress(), DefaultBlockParameterName.LATEST).send();
BigInteger nonce = ethGetTransactionCount.getTransactionCount();
// Value to transfer (ERC20 token)
BigInteger balance = Convert.toWei("1", Convert.Unit.ETHER).toBigInteger();
// create transfer function
Function function = transfer(dstAddress, balance);
String encodedFunction = FunctionEncoder.encode(function);
// Gas Parameters
BigInteger gasLimit = BigInteger.valueOf(71000); // you should get this from api
BigInteger gasPrice = new BigInteger("d693a400", 16); // decimal 3600000000
// create the transaction
RawTransaction rawTransaction =
RawTransaction.createTransaction(
nonce, gasPrice, gasLimit, < ERC20_CONTRACT_ADDRESS >, encodedFunction);
// sign the transaction
byte[] signedMessage = TransactionEncoder.signMessage(rawTransaction, credentials);
String hexValue = Numeric.toHexString(signedMessage);
// Send transaction
EthSendTransaction ethSendTransaction = web3.ethSendRawTransaction(hexValue).sendAsync().get();
String transactionHash = ethSendTransaction.getTransactionHash();
传递函数可以是:
private Function transfer(String to, BigInteger value) {
return new Function(
"transfer",
Arrays.asList(new Address(to), new Uint256(value)),
Collections.singletonList(new TypeReference<Bool>() {
}));
}
我目前使用的是Web3 JavaScript API的0.2x.x版本。我通过在solidity(在REMIX IDE上)中创建智能契约来部署我的自定义ERC20令牌。我安装了元掩码,并在https://wallet.ethereum.org/上测试发送一些自定义ERC令牌到另一个我的帐户。效果很好。我想使用Web3js在我的JavaScript代码中添加“发送自定义ERC20令牌”功能。 这是我
我正在尝试在web3中实现一个可靠的“购买”功能。最终,我希望有一个按钮,然后用户将打开元掩码以将固定金额(简单示例为1个以太币)发送到智能合约以换取ERC20令牌。我已经学会了如何在两个钱包之间转移代币,但现在我想更进一步,学习如何发送以太币来接收ERC20。这是我一直在使用的坚固性“购买”功能: 现在,我一直在使用这个与元amask结合的OnClick按钮来传输ERC20: 您对如何在JS中实
我有一个代表ERC20令牌的智能合约。我已经使用安全帽在币安测试网上部署了智能合约。 我也有一个部署的智能合约地址。 我使用以下链接在PHP laravel项目中集成了Web3库。 我可以调用web3函数来获取令牌符号。它运行良好。 我想使用智能合约的“转移”功能将我的代币转移到某个钱包地址。 我正在使用以下代码。 但我得到以下错误。 有人能指导我解决这个问题吗? 这是Token.json- 阿比
我通过在ERC20.sol文件中实现OpenZeppelin创建了一个基本的ERC20令牌: 然后执行另一个合同。sol如下: 因为,我已经从地址0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2部署了两个合约,所以它拥有100000000000000000000000000个令牌 但当我从同一地址调用函数时,我得到了以下错误: 交易到简单银行.存款错误:虚拟机错
Creating your own ERC20 Token on the MOAC blockchain Before you read this page, you should: Understand the following general concepts: blockchain, smart contracts, ERC20 tokens; Be able to write a bas
我找到的签名Google云存储Blob的示例和源代码都需要服务帐户凭据文件(私钥是特定的)。例如: https://cloud.google.com/storage/docs/access-control/signing-urls-with-helpers#storage-签名url获取对象python 但是,由于我遵循此处讨论的授权流程,因此我只有OAuth2.0访问令牌(并且我没有能够访问GC