首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
宝塔
V2EX  ›  区块链

erc20 转账问题

  •  
  •   brust · 58 天前 · 751 次点击
    这是一个创建于 58 天前的主题,其中的信息可能已经有所发展或是发生改变。
    第 1 条附言  ·  58 天前
       //转账
        public void sendTx(String fromPrivateKey,String toAddress) throws IOException, ExecutionException, InterruptedException {
            String contractAddress = "0xdac17f958d2ee523a2206206994597c13d831ec7";
            ECKeyPair ecKeyPair = ECKeyPair.create(new BigInteger(fromPrivateKey, 16));
            String from = "0x"+Keys.getAddress(ecKeyPair.getPublicKey());
            log.info("from:\t\t{}",from);
            log.info("  to:\t\t{}",toAddress);
            BigDecimal amount = new BigDecimal("1");
            BigInteger amountBigInteger = Convert.toWei(amount, Convert.Unit.MWEI).toBigInteger();
            EthGetTransactionCount ethGetTransactionCount = web3j.ethGetTransactionCount(
                    from, DefaultBlockParameterName.LATEST).sendAsync().get();
            BigInteger nonce = ethGetTransactionCount.getTransactionCount();
            //离线签名 代币
            Credentials credentials = Credentials.create(ecKeyPair);
            byte[] signedMessage;
            Function function = new Function(
                    "transfer",
                    Arrays.asList(new Address(toAddress), new Uint256(amountBigInteger)),
                    Arrays.asList(new TypeReference<Type>(){})
            );
            String data = FunctionEncoder.encode(function);
    		
            RawTransaction rawTransaction = RawTransaction.createTransaction(nonce, Convert.toWei("38", Convert.Unit.GWEI).toBigInteger(),
                    Convert.toWei("30000", Convert.Unit.WEI).toBigInteger(), contractAddress, data);
            signedMessage = TransactionEncoder.signMessage(rawTransaction, credentials);
            String hexValue = Numeric.toHexString(signedMessage);
            log.info("signedData : " + hexValue);
            //广播
            EthSendTransaction send = web3j.ethSendRawTransaction(hexValue).send();
            ...
        }
    
    11 回复  |  直到 2019-09-19 10:32:06 +08:00
        1
    brust   58 天前
        2
    brust   58 天前
        3
    Hconk   58 天前 via iPhone
    明显 gas limit 给少了,erc20 一般的转账给 5w 差不多够了。
        4
    brust   58 天前
    @Hconk #3
    我给 5w 还是失败了
        5
    Hconk   58 天前 via iPhone
    @brust 交易 hash 发出来看下
        6
    brust   58 天前
    @Hconk #5 0xd973acf0f426b15e07075bb05c6d4e33f4d3156d6a3e961c18ed221bf7ebbd7f
        7
    Hconk   58 天前 via iPhone
    @brust 你的 usd 不够了,你给的链接里面 decimal 是 18 的 token 举例的,你转账的这个 erc20 的 decimal 是 6,改一下金额转换时候的单位,把 18 改成 6。
        8
    brust   58 天前
    @Hconk #7
    谢谢
    但是我把金额改成 6 了后
    0x5b97b6cdd65996c942bc32e1ff818078dee5530e29e73a98453dd71aa3cf55b3
    还是失败了
        9
    Hconk   58 天前 via iPhone
    @brust 你追加的代码里面 decimal 给了 38 ?
        10
    brust   58 天前
    @Hconk #9
    Convert.toWei("38", Convert.Unit.GWEI )这是 gasPrice

    这个不对吗?
    amount 和 gasprice 和 gaslimit 要怎么设置好
    为什么我的 Gas Used by Transaction:都是 100%
        11
    brust   57 天前

    转账成功了,精度弄错了

    还有一个疑问就是 手续费似乎有点高?

    https://etherscan.io/tx/0x43a0c50f4b0f46b71ade7ba3221b78f7de33c6b562127031fd1b7e383d8039d7
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1787 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 38ms · UTC 16:26 · PVG 00:26 · LAX 08:26 · JFK 11:26
    ♥ Do have faith in what you're doing.