java TRC20

这篇具有很好参考价值的文章主要介绍了java TRC20。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

直接上代码!!!

创建地址(离线):

	private static SecureRandom random = new SecureRandom();
	/**具体方法
	*/
	public static Map<String, String> createAddress() {
			ECKey eCkey = new ECKey(random);
			String privateKey = ByteArray.toHexString(eCkey.getPrivKeyBytes());
			byte[] addressBytes = eCkey.getAddress();
			String hexAddress = ByteArray.toHexString(addressBytes);
			Map<String, String> addressInfo = new HashMap<>(3);
			addressInfo.put("address", toViewAddress(hexAddress));
			addressInfo.put("hexAddress", hexAddress);
			addressInfo.put("privateKey", privateKey);
			return addressInfo;
		}

	/**
	 * 转换成T开头的地址
	 * @param hexAddress
	 * @return
	 */
	public static String toViewAddress(String hexAddress) {
		return encode58Check(ByteArray.fromHexString(hexAddress));
	}


ps:这里的参数都是明文,如需加密,自己搞定。

查余额(节点):


	/**
     * 查询数量
     */
    public BigDecimal balanceOf(String address) {
        String url = tronUrl +"/wallet/triggerconstantcontract";
        JSONObject param = new JSONObject();
        param.put("owner_address", TronUtils.toHexAddress(address));
        param.put("contract_address", TronUtils.toHexAddress(contract));
        param.put("function_selector", "balanceOf(address)");
        List<Type> inputParameters = new ArrayList<>();
        inputParameters.add(new Address(TronUtils.toHexAddress(address).substring(2)));
        param.put("parameter", FunctionEncoder.encodeConstructor(inputParameters));
        String result = HttpClientUtils.postJson(url, param.toJSONString());
        if (StringUtils.isNotEmpty(result)) {
            JSONObject obj = JSONObject.parseObject(result);
            JSONArray results = obj.getJSONArray("constant_result");
            if (results != null && results.size() > 0) {
                BigInteger amount = new BigInteger(results.getString(0), 16);
                return new BigDecimal(amount).divide(decimal, 6, RoundingMode.FLOOR);
            }
        }
        return BigDecimal.ZERO;
    }
/**
     * contract address
     */
    private String contract = "xxx";

这里的address必须是hex(16进制)类型地址,

根据PrivateKey获取地址

/**
	 * 根据私钥获取地址
	 *
	 * @param privateKey
	 * @return
	 */
	public static String getAddressByPrivateKey(String privateKey) {
		byte[] privateBytes = Hex.decode(privateKey);
		ECKey ecKey = ECKey.fromPrivate(privateBytes);
		byte[] from = ecKey.getAddress();
		return toViewAddress(Hex.toHexString(from));
	}

这个没什么特殊的。直接用就好了!

通过区块高度获取Transfer信息(归集用):

/**
     * 获取特定区块的所有Info 信息
     *
     * @return
     */
    private String getTransactionInfoByBlockNum(BigInteger num) {
        String url = tronUrl + "/wallet/gettransactioninfobyblocknum";
        Map<String, Object> map = new HashMap<>();
        map.put("num", num);
        String param = JSON.toJSONString(map);
        return HttpClientUtils.postJson(url, param);
    }

查询最新区块:

/**
     * 查询最新区块
     *
     * @return
     */
    public BigInteger getNowBlock() {
        String url = tronUrl + "/wallet/getnowblock";
        String httpRequest = HttpRequest.get(url).execute().body();
        JSONObject jsonObject1 = JSONObject.parseObject(httpRequest);
        return jsonObject1.getJSONObject("block_header").getJSONObject("raw_data").getBigInteger("number");
    }

根据hash,返回Transaction状态

/**
     * 返回状态
     */
    public boolean transactionStatus(String hash) {
        JSONObject parseObject = JSON.parseObject(getTransactionById(hash));
        if (StringUtils.isEmpty(parseObject.toJSONString())) {
            return false;
        }
        String contractRet = parseObject.getJSONArray("ret").getJSONObject(0).getString("contractRet");
        return "SUCCESS".equals(contractRet);
    }
    
/**
     * 通过HASH获取Transaction信息
     *
     * @param hash
     * @return
     */
    public String getTransactionById(String hash) {
        String url = tronUrl + "/walletsolidity/gettransactionbyid";
        Map<String, Object> map = new HashMap<>();
        map.put("value", hash);
        String param = JSON.toJSONString(map);
        return HttpClientUtils.postJson(url, param);
    }

重点!!!

/**
     * 
     *
     * @throws Throwable
     */
    public String sendTrc20(String privateKey, String toAddress, BigDecimal amount) throws Throwable {
        String ownerAddress = TronUtils.getAddressByPrivateKey(privateKey);
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("contract_address", contract);
        jsonObject.put("function_selector", "transfer(address,uint256)");
        List<Type> inputParameters = new ArrayList<>();
        inputParameters.add(new Address(TronUtils.toHexAddress(toAddress).substring(2)));
        inputParameters.add(new Uint256(amount.multiply(decimal).toBigInteger()));
        String parameter = FunctionEncoder.encodeConstructor(inputParameters);
        jsonObject.put("parameter", parameter);
        jsonObject.put("owner_address", ownerAddress);
        jsonObject.put("call_value", 0);
        jsonObject.put("fee_limit", 50000000L);
        jsonObject.put("visible", true);
        String trans1 = HttpClientUtils.postJson(tronUrl + "/wallet/triggersmartcontract", jsonObject.toString());
        JSONObject result = JSONObject.parseObject(trans1);
        if (result.containsKey("Error")) {
            throw new DfzgRuntimeException(WestError.WEST_TIMEOUT);
        }
        JSONObject tx = result.getJSONObject("transaction");
        //填写备注
        tx.getJSONObject("raw_data").put("data", Hex.toHexString("备注信息".getBytes()));
        String txid = TronUtils.signAndBroadcast(tronUrl, privateKey, tx);
        if (txid != null) {
            return txid;
        }
        return null;
    }

有个需要注意的,不了解波场链机制的朋友,可以先在TronLink上转账模拟一下。波场链Transfer是需要能量和带宽的,如果需要归集的话,是需要给被归集的地址支付一些Trx的,不然不能Deal。

TRX Transfer

/**
     * TRX Transfer
     */
    public String sendTrx(BigDecimal amount,String toAddress,String note) throws Throwable {
        String url = tronUrl + "/wallet/createtransaction";
        JSONObject param = new JSONObject();
        String privateKey = "私钥";
        param.put("owner_address", TronUtils.getAddressByPrivateKey(privateKey));
        param.put("to_address",toAddress);
        param.put("amount",amount.multiply(decimal).toBigInteger());
        param.put("visible", true);
        String result = HttpClientUtils.postJson(url, param.toJSONString());
        if(StringUtils.isNotEmpty(result)){
            JSONObject transaction = JSONObject.parseObject(result);
            String error = transaction.getString("Error");
            if(!StringUtil.isEmpty(error) && error.contains("balance is not sufficient")){
                throw new DfzgRuntimeException(WestError.WEST_NO_MONEY);
            }else {
                transaction.getJSONObject("raw_data").put("data", Hex.toHexString(note.getBytes()));
                return TronUtils.signAndBroadcast(tronUrl, privateKey, transaction);
            }
        }
        throw new DfzgRuntimeException(WestError.WEST_TIMEOUT);
    }

TRX查询余额

/**
     * 查询TRX额度
     */
    public BigDecimal balanceOf(String address) {
        String url = tronUrl + "/wallet/getaccount";
        JSONObject param = new JSONObject();
        param.put("address", TronUtils.toHexAddress(address));
        String result = HttpClientUtils.postJson(url, param.toJSONString());
        BigInteger balance = BigInteger.ZERO;
        if (!StringUtils.isEmpty(result)) {
            JSONObject obj = JSONObject.parseObject(result);
            BigInteger b = obj.getBigInteger("balance");
            if(b != null){
                balance = b;
            }
        }
        return new BigDecimal(balance).divide(decimal,6, RoundingMode.FLOOR);
    }

好啦,以上这些就是我的全部内容。
希望大家用的开心~
欢迎打赏,想深入交流的可以加QQ:296563552文章来源地址https://www.toymoban.com/news/detail-628824.html

到了这里,关于java TRC20的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用 JavaScript 和 TronWeb 库来实现监控TRC20余额

    监控一个 TRC20 代币的钱包地址余额,以下是您可以遵循的步骤: 1. 安装 TronWeb : TronWeb 是一个允许您与波场区块链交互的 JavaScript 库。 首先,您需要在您的项目中安装它。使用 NPM 安装 TronWeb: 2.  初始化 TronWeb 实例 : 创建一个 TronWeb 实例并连接到波场网络。您可以选择连接

    2024年04月23日
    浏览(63)
  • 区块链3链(TRC ERC BSC)授权持币生息源码

    分享一款3链(TRC ERC BSC)授权持币生息源码、来自群友投稿的资源、据说是运营级的。简单的看了下没有问题什么大问题、有能力的可以拿来二开其他的模板。 搭建非常简单,教程就不写了、环境NGINX1.2+PHP7.2+MYSQL5.6+TP默认伪静态 此类源码需要自己查有无后门,见过太多人放

    2024年02月11日
    浏览(40)
  • 一张图看懂 USDT三种类型地址 Omni、ERC20、TRC20的区别

    USDT 是当前实用最广泛,市值最高的稳定币,它是中心化的公司Tether发行的。在今年的4月17日之前,市场上存在着2种不同类型的USDT。4月17日又多了一种波场TRC20协议发行的USDT,它们各自有什么区别呢?哪个转账最快到账?哪种最安全?手续费最低? USDT三种链类型Omni、ERC20、

    2024年02月03日
    浏览(49)
  • 波场链通过Tron JS SDK TronWeb发送带备注的TRC - 20 转账及使用简介

    波场链通过tronWeb发送带备注的TRC - 20 转账

    2024年02月11日
    浏览(78)
  • 宝塔面板SRS音视频TRC服务器启动失败

    首先,查找原因 运行结果: 运行结果: 找打了name为srs-stack的应用 运行结果: 找到原因了,端口8080被占用 每个人根据自己的服务进程修改掉占用端口的程序即可 再次启动 报错: 运行结果: 用ftp工具下载该配置文件,打开,内容如下: 将1935改成1936 在相同目录下可以找到

    2024年01月24日
    浏览(51)
  • 区块链-发币 20分钟教程

    1.1 ERC20 代码 代码逻辑为创建一个称为\\\"DemoCoin\\\"的代币,在以太坊上的代币标志是“DCN” 1.2 开发工具 remix是 solidity 在线开发工具。 网址为: https://remix.ethereum.org/#lang=enoptimize=falseruns=200evmVersion=nullversion=soljson-v0.8.24+commit.e11b9ed9.js 2.1 创建项目 打开 remix,选择OpenZeppelin模版。

    2024年04月13日
    浏览(24)
  • 区块链ERC20.json

    2024年02月11日
    浏览(42)
  • 区块链安全20种注意的风险

    目录 女巫(Sybil)攻击 防护建议 端点漏洞 防护建议 51%攻击

    2024年02月10日
    浏览(35)
  • 《区块链技术与应用》北大肖臻老师——课程笔记【19-20】

    提示:以下内容只是个人在学习过程中记录的笔记,图片均是肖老师课程的截图,可供参考。如有错误或不足之处,请大家指正。 Block chain is secured by mining. 对于基于工作量证明的系统来说,挖矿是保障区块链安全的一个重要手段。 比特币的挖矿算法总的来说比较成功,没有

    2024年02月09日
    浏览(39)
  • 区块链实验室(20) - FISCO控制台连接到指定的节点

    在FISCO技术文档中,控制台默认采用config.toml作为配置文件,并指定了连接的节点地址和商品,如下所示。 在该案例中,控制台将连接到端口为20200、20201的节点,即node0和node1节点。如果要连接到其他指定的节点,修改该配置。例如如下。 重启控制台之后,将连接到node99节点

    2024年02月09日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包