TRC20合约调用DEMO

本文介绍了一种基于TRON区块链平台的操作示例,包括如何使用TRC20合约进行转账、授权等操作,以及如何获取账户信息和创建账户。通过具体的Java代码实现了对TRON智能合约的交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

nle测试网调用

package main;

import org.tron.trident.core.ApiWrapper;
import org.tron.trident.core.contract.Contract;
import org.tron.trident.core.contract.Trc20Contract;
import org.tron.trident.core.exceptions.IllegalException;
import org.tron.trident.core.key.KeyPair;
import org.tron.trident.crypto.SECP256K1;
import org.tron.trident.proto.Chain;
import org.tron.trident.proto.Response;
import java.math.BigInteger;
import java.util.HashMap;
import java.util.Map;

public class main {

    public static void main(String[] args) {


    }


    public static String transferFrom(String hexPrivateKey,String apiKey,String contractAddress,String ownerAddr,String accountAddr,long amount){
        Trc20Contract token=trcTen(
                hexPrivateKey,
                apiKey,
                contractAddress,
                ownerAddr);
        BigInteger balance=allowance(hexPrivateKey,apiKey,contractAddress,ownerAddr,accountAddr);
        if(balance.compareTo(BigInteger.valueOf (amount))==-1){
            return "授权余额不足:"+balance;
        }
        return token.transferFrom(ownerAddr,accountAddr,amount,6,"间接交易",100000000L);
    }

  
    public static BigInteger balance(String hexPrivateKey,String apiKey,String contractAddress,String ownerAddr){
        Trc20Contract token=trcTen(
                hexPrivateKey,
                apiKey,
                contractAddress,
                ownerAddr);
        return token.balanceOf(ownerAddr);
    }

  
    public static String transfer(String hexPrivateKey,String apiKey,String contractAddress,String ownerAddr,String accountAddr,long amount){
        Trc20Contract token=trcTen(
                hexPrivateKey,
                apiKey,
                contractAddress,
                ownerAddr);
        BigInteger balance=token.balanceOf(ownerAddr);
        if(balance.compareTo(BigInteger.valueOf (amount))==-1){
            return "账户余额不足:"+balance;
        }
        return token.transfer(accountAddr,amount,6,"直接交易",100000000L);
    }

  
    public static Response.Account getTronAccountInfo(String hexPrivateKey, String apiKey,String ownerAddr){
        ApiWrapper wrapper = ApiWrapper.ofMainnet(hexPrivateKey,apiKey);
        return wrapper.getAccount(ownerAddr);
    }

  
    public static String approve(String hexPrivateKey,String apiKey,String contractAddress,String ownerAddr,String accountAddr,long amount){
        Trc20Contract token=trcTen(
                hexPrivateKey,
                apiKey,
                contractAddress,
                ownerAddr);
        return token.approve(accountAddr, amount,6,"批准交易",100000000L);
    }

  
    public static BigInteger allowance(String hexPrivateKey,String apiKey, String contractAddress, String ownerAddr, String accountAddr){
        Trc20Contract token=trcTen(
                hexPrivateKey,
                apiKey,
                contractAddress,
                ownerAddr);
        return token.allowance(ownerAddr,accountAddr);
    }
   
    public static Response.AccountResourceMessage selectAccount(String hexPrivateKey, String apiKey, String ownerAddr){
        ApiWrapper wrapper = ApiWrapper.ofMainnet(hexPrivateKey,apiKey);
        return wrapper.getAccountResource(ownerAddr);
    }

   
    public static String createAccount(String hexPrivateKey,String apiKey, String ownerAddr,String accountAddr){
        ApiWrapper wrapper = ApiWrapper.ofMainnet(hexPrivateKey,apiKey);
        Response.TransactionExtention transaction = null;
        try {
            transaction = wrapper.createAccount(ownerAddr,accountAddr);
        } catch (IllegalException e) {
            e.printStackTrace();
        }
        Chain.Transaction signedTxn = wrapper.signTransaction(transaction);
        return wrapper.broadcastTransaction(signedTxn);
    }
   
    public static Map<String,Object> createKeyPair(){
        Map<String,Object> m=new HashMap<>();
        KeyPair keyPair = KeyPair.generate();
        SECP256K1.PublicKey pubKey= keyPair.getRawPair().getPublicKey();
        m.put("publicKey",keyPair.toPublicKey());
        m.put("privateKey",keyPair.toPrivateKey());
        m.put("base58Check",KeyPair.publicKeyToBase58CheckAddress(pubKey));
        m.put("hex",KeyPair.publicKeyToHexAddress(pubKey));
        m.put("keyPair",keyPair);
        return m;
    }

   
    public static void publicSign(byte[] txid,KeyPair keyPair){
        KeyPair.signTransaction(txid,keyPair);
    }


   
    public static Trc20Contract trcTen(String hexPrivateKey,String apiKey,String contractAddress,String ownerAddr){
        ApiWrapper wrapper = ApiWrapper.ofMainnet(hexPrivateKey,apiKey);
        Contract contract =wrapper.getContract(contractAddress);
        return new Trc20Contract(contract, ownerAddr, wrapper);
    }





}

封装好的demo下载地址TRX USDT合约

测试getcoin

### TRC20 合约模板 以下是基于 Solidity 的标准 TRC20 合约模板,适用于 Tron 网络上的代币开发: ```solidity // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface ITRC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } contract TRC20 is ITRC20 { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _decimals = 6; // 默认精度为6,可根据需求调整 } function name() public view virtual returns (string memory) { return _name; } function symbol() public view virtual returns (string memory) { return _symbol; } function decimals() public view virtual returns (uint8) { return _decimals; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { require(recipient != address(0), "TRC20: 转账到零地址"); _transfer(msg.sender, recipient, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(msg.sender, spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { require(sender != address(0), "TRC20: 转账来自零地址"); require(recipient != address(0), "TRC20: 转账到零地址"); uint256 currentAllowance = _allowances[sender][msg.sender]; require(currentAllowance >= amount, "TRC20: 批准金额不足"); _transfer(sender, recipient, amount); _approve(sender, msg.sender, currentAllowance - amount); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][spender] + addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[msg.sender][spender]; require(currentAllowance >= subtractedValue, "TRC20: 减少批准金额超出当前值"); _approve(msg.sender, spender, currentAllowance - subtractedValue); return true; } function mint(uint256 amount) internal { // 可选方法用于铸造新代币 _mint(msg.sender, amount); } function burn(uint256 amount) internal { // 可选方法用于销毁代币 _burn(msg.sender, amount); } function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "TRC20: 转账来自零地址"); require(recipient != address(0), "TRC20: 转账到零地址"); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "TRC20: 转账金额超过余额"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "TRC20: 铸造到零地址"); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "TRC20: 销毁来自零地址"); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "TRC20: 销毁金额超过余额"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); } function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "TRC20: 批准来自零地址"); require(spender != address(0), "TRC20: 批准给零地址"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } } ``` 上述代码展示了如何实现一个基本的 TRC20 合约开发者可以在此基础上自定义 `token name`、`token symbol` 和其他参数[^1]。 ### 修改 Token 参数 在实际应用中,可以通过修改合约中的 `_name`, `_symbol`, `_decimals` 和初始供应量来定制化代币属性。例如,在构造函数中初始化这些变量并设置总供应量[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值