主頁 > 區塊鏈 > JAVA波場鏈TRX的USDT授權轉賬

JAVA波場鏈TRX的USDT授權轉賬

2022-01-18 09:02:20 區塊鏈

最近有個專案需要用到波場鏈的授權轉賬,找了各種檔案資料都沒有詳細說明,因為做交易所的時候有一個功能叫授權轉賬,比如我們充值到交易所的充值地址,其實當交易所創建這個充值地址的時候會呼叫合約approve方法把當前地址操作權限授權給交易所的熱錢包來操作當前充值地址,在參考別人轉賬代碼的基礎上實作了transferFrom功能,自己也研究了1周才搞定,給后來人少走的彎路吧

下來來代碼

public static final String SUCCESS_STATUS = "SUCCESS" ;  
	public static final String TRANSFER_TYPE = "TransferContract" ;   
	public static final  int HEX_ADDRESS_SIZE = 21;
	public static final byte ADD_PRE_FIX_BYTE_TESTNET = (byte) 0xa0;   //a0 + address

	@Autowired
	private RestTemplate restTemplate;

	private static SecureRandom random = new SecureRandom();
	


	private static  final  Integer PRECIS=18;

	/**
	 * trc20合約地址 這個是USDT代幣
	 */
	private String contract = "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t";


	/**
	 * TRX主網
	 */
	private static final String tronUrl = "https://api.trongrid.io";

	private static final String WALLET_URL="https://api.trongrid.io";

	private static final long feeLimit=1000000L;

	/**
	 * 代幣精度
	 */
	//token的精度  就是小數點后面有多少位小數 然后1后面加多少個0就可以
	private static final BigDecimal decimal = new BigDecimal("1000000");
 

查詢余額

 public BigDecimal usdtBalanceOf(String address) {
        return balanceOf(contract,address);
    }



    public String getTransactionById(String txId){
		Map<String,Object> param = new HashMap<>();
		param.put("value", txId);
		String url=tronUrl + "/wallet/gettransactionbyid";
		String jsonStr =restTemplate.postForEntity(url,param, String.class).getBody();
		return jsonStr;
	}


	/**
     * 查詢tron幣數量
     *
     * @param address
     * @return
     */
    public BigDecimal balanceOfTron(String address) {
        final BigDecimal decimal = new BigDecimal("1000000");
        final int accuracy = 6;//六位小數
        Map<String, Object> param = new HashMap<>();
        param.put("address", castHexAddress(address));
        String url=tronUrl + "/wallet/getaccount";
        JSONObject obj  = restTemplate.postForEntity(url,param,JSONObject.class).getBody();
        if (obj != null) {
            BigInteger balance = obj.getBigInteger("balance");
            if(balance == null) balance = BigInteger.ZERO;
            return new BigDecimal(balance).divide(decimal, accuracy, RoundingMode.FLOOR);
        }
        return BigDecimal.ZERO;
    }


	/**
	 * 查詢額度
	 *
	 * @param contract 合約地址
	 * @param address  查詢地址
	 * @return
	 */
	public BigDecimal balanceOf(String contract, String address) {
		String hexAddress = address;
		if (address.startsWith("T")) {
			hexAddress = TronUtils.toHexAddress(address);
		}
		String hexContract = contract;
		if (contract.startsWith("T")) {
			hexContract = TronUtils.toHexAddress(contract);
		}
		TriggerSmartContract.Param param = new TriggerSmartContract.Param();
		param.setContract_address(hexContract);
		param.setOwner_address(hexAddress);
		param.setFunction_selector("balanceOf(address)");
		String addressParam = addZero(hexAddress.substring(2), 64);
		param.setParameter(addressParam);
		String url=tronUrl + "/wallet/triggersmartcontract";
        TriggerSmartContract.Result result = restTemplate.postForEntity(url,param,TriggerSmartContract.Result.class).getBody();
		if (result != null && result.isSuccess()) {
			String value = result.getConstantResult(0);
			if (value != null) {
                final int accuracy = 6;//六位小數
                return new BigDecimal(value).divide(decimal, accuracy, RoundingMode.FLOOR);
				//return new BigInteger(value, 16);
			}
		}
		return BigDecimal.ZERO;
	}

	public String castHexAddress(String address) {
		if (address.startsWith("T")) {
			return TronUtils.toHexAddress(address);
		}
		return address;
	}

代幣授權轉賬

/**
	 * 代幣轉賬  trc20
	 *
	 * @param contract
	 * @param fromAddress
	 * @param privateKey  fromAddress的私鑰
	 * @param amount
	 * @param toAddress
	 * @param remark
	 * @return
	 */
	public String sendTokenTransformTransaction(String contract,String authAddress, String fromAddress, String privateKey, String amount, String toAddress, String remark) {
		try {
			String hexFromAddress = castHexAddress(fromAddress);
			String hexToAddress = castHexAddress(toAddress);
			String hexAuthAddress = castHexAddress(authAddress);
			String hexContract = castHexAddress(contract);

			BigInteger a = new BigInteger(amount);
			if (a.compareTo(BigInteger.ZERO) <= 0) {
				log.error("轉賬失敗:額度不符合規則 " + amount);
				return null;
			}
			if (remark == null) {
				remark = "";
			}
			TriggerSmartContract.Param param = new TriggerSmartContract.Param();
			param.setOwner_address(hexAuthAddress);
			param.setContract_address(hexContract);
			param.setFee_limit(6000000L);
//			param.setFunction_selector("transfer(address,uint256)");
			param.setFunction_selector("transferFrom(address,address,uint256)");
            String fromAddressParam = addZero(hexFromAddress, 64);
			String addressParam = addZero(hexToAddress, 64);
			String amountParam = addZero(a.toString(16), 64);
			param.setParameter(fromAddressParam+ addressParam + amountParam);
			log.info("創建交易引數:" + JSONObject.toJSONString(param));
			String url=tronUrl + "/wallet/triggersmartcontract";
			String json = restTemplate.postForEntity(url,param,String.class).getBody();
			log.info("創建交易回傳:" + json);
			TriggerSmartContract.Result obj=JSON.parseObject(json,TriggerSmartContract.Result.class);
			if (!obj.isSuccess()) {
				log.error("創建交易失敗");
				return null;
			}
			Transaction transaction= TronUtils.packTransaction(JSON.toJSONString(obj.getTransaction()));
			byte[] transaction4 = signTransaction2Byte(transaction.toByteArray(), ByteArray.fromHexString(privateKey));

			com.alibaba.fastjson.JSONObject transactionObj =  org.tron.common.utils.Utils.printTransactionToJSON(Transaction.parseFrom(transaction4), false);
			JSONObject jsonObject = restTemplate.postForEntity(tronUrl+"/wallet/broadcasttransaction",transactionObj, JSONObject.class).getBody();
			log.info("廣播交易結果:" + jsonObject.toJSONString());
			if (jsonObject != null) {
				Object result = jsonObject.get("result");
				if (result instanceof Boolean) {
					if ((boolean) result) {
						return (String) jsonObject.get("txid");
					}
				}
			}
		} catch (Throwable t) {
			log.error(t.getMessage(), t);
		}
		return null;
	}

代幣轉賬

/**
	 * 代幣轉賬  trc20
	 *
	 * @param contract
	 * @param fromAddress
	 * @param privateKey  fromAddress的私鑰
	 * @param amount
	 * @param toAddress
	 * @param remark
	 * @return
	 */
	public String sendTokenTransaction(String contract, String fromAddress, String privateKey, String amount, String toAddress, String remark) {
		try {
			String hexFromAddress = castHexAddress(fromAddress);
			String hexToAddress = castHexAddress(toAddress);
			String hexContract = castHexAddress(contract);

			BigInteger a = new BigInteger(amount);
			if (a.compareTo(BigInteger.ZERO) <= 0) {
				log.error("轉賬失敗:額度不符合規則 " + amount);
				return null;
			}
			if (remark == null) {
				remark = "";
			}
			TriggerSmartContract.Param param = new TriggerSmartContract.Param();
			param.setOwner_address(hexFromAddress);
			param.setContract_address(hexContract);
			param.setFee_limit(1000000L);
			param.setFunction_selector("transfer(address,uint256)");
			String addressParam = addZero(hexToAddress, 64);
			String amountParam = addZero(a.toString(16), 64);
			param.setParameter(addressParam + amountParam);
            log.info("創建交易引數:" + JSONObject.toJSONString(param));
            String url=tronUrl + "/wallet/triggersmartcontract";
			String json = restTemplate.postForEntity(url,param,String.class).getBody();
			TriggerSmartContract.Result obj=JSON.parseObject(json,TriggerSmartContract.Result.class);
			if (!obj.isSuccess()) {
				log.error("創建交易失敗");
				return null;
			}
			Transaction transaction= TronUtils.packTransaction(JSON.toJSONString(obj.getTransaction()));
			byte[] transaction4 = signTransaction2Byte(transaction.toByteArray(), ByteArray.fromHexString(privateKey));

			com.alibaba.fastjson.JSONObject transactionObj =  org.tron.common.utils.Utils.printTransactionToJSON(Transaction.parseFrom(transaction4), false);
			JSONObject jsonObject = restTemplate.postForEntity(tronUrl+"/wallet/broadcasttransaction",transactionObj, JSONObject.class).getBody();
           // JSONObject rea = restTemplate.postForEntity(tronUrl+"/wallet/broadcasttransaction",signParam, JSONObject.class).getBody();
            log.info("廣播交易結果:" + jsonObject.toJSONString());
			if (jsonObject != null) {
				Object result = jsonObject.get("result");
				if (result instanceof Boolean) {
						if ((boolean) result) {
							return (String) jsonObject.get("txid");
						}
					}
			}

		} catch (Throwable t) {
			log.error(t.getMessage(), t);
		}
		return null;
	}


    /**
     * 補充0到64個位元組
     *
     * @param dt
     * @return
     */
    private String addZero(String dt, int length) {
        StringBuilder builder = new StringBuilder();
        final int count = length;
        int zeroAmount = count - dt.length();
        for (int i = 0; i < zeroAmount; i++) {
            builder.append("0");
        }
        builder.append(dt);
        return builder.toString();
    }

創建地址

/**具體方法
	 */
	public  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);
		//String privateKeyBase58 = org.spongycastle.util.encoders.Hex.e(base58Str);
		String privateKeyBase58= encode58Check(eCkey.getPrivKeyBytes());

		addressInfo.put("privateKeyBase58", privateKeyBase58);
		return addressInfo;
	}

代碼下載地址:

trx-usdt-transfer.zip-Java檔案類資源-CSDN下載TRX波場轉賬和USDT轉賬及授權轉賬更多下載資源、學習資料請訪問CSDN下載頻道.https://download.csdn.net/download/kingson88/76251400

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/413975.html

標籤:區塊鏈

上一篇:如何在4everland中設定ENS域名托管

下一篇:返回列表

標籤雲
其他(135580) Python(24196) JavaScript(15065) Java(14688) C(11128) 區塊鏈(8211) AI(6849) 基礎類(6313) MySQL(5223) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4199) Linux(4109) PHP(3814) C#(3716) 爪哇(3561) html(3374) C語言(3288) C++語言(3117) sql(3024) R(2776) 熊猫(2774) Java相關(2746) 数组(2739) 疑難問題(2699) 反应(2482) 單片機工控(2479) css(2105) 数据框(1968) Web開發(1951) 节点.js(1938) VBA(1919) 網絡通信(1793) 蟒蛇-3.x(1774) 數據庫相關(1767) VB基礎類(1755) .NETCore(1664) ASP.NET(1648) 開發(1646) 系統維護與使用區(1617) 列表(1581) 基礎和管理(1579) C++(1578) json(1568) JavaEE(1566) 安卓(1523) HtmlCss(1516) 專題技術討論區(1515) Windows客戶端使用(1484) 扑(1469) iOS(1432) 查询(1408) 打字稿(1376) .NET技术(1367) Unity3D(1366) VCL組件開發及應用(1353) sql-server(1287) Qt(1283) 细绳(1226) HTML(CSS)(1220)

熱門瀏覽
  • JAVA使用 web3j 進行token轉賬

    最近新學習了下區塊鏈這方面的知識,所學不多,給大家分享下。 # 1. 關于web3j web3j是一個高度模塊化,反應性,型別安全的Java和Android庫,用于與智能合約配合并與以太坊網路上的客戶端(節點)集成。 # 2. 準備作業 jdk版本1.8 引入maven <dependency> < ......

    uj5u.com 2020-09-10 03:03:06 more
  • 以太坊智能合約開發框架Truffle

    前言 部署智能合約有多種方式,命令列的瀏覽器的渠道都有,但往往跟我們程式員的風格不太相符,因為我們習慣了在IDE里寫了代碼然后打包運行看效果。 雖然現在IDE中已經存在了Solidity插件,可以撰寫智能合約,但是部署智能合約卻要另走他路,沒辦法進行一個快捷的部署與測驗。 如果團隊管理的區塊節點多、 ......

    uj5u.com 2020-09-10 03:03:12 more
  • 谷歌二次驗證碼成為區塊鏈專用安全碼,你怎么看?

    前言 谷歌身份驗證器,前些年大家都比較陌生,但隨著國內互聯網安全的加強,它越來越多地出現在大家的視野中。 比較廣泛接觸的人群是國際3A游戲愛好者,游戲盜號現象嚴重+國外賬號安全應用廣泛,這類游戲一般都會要求用戶系結名為“兩步驗證”、“雙重驗證”等,平臺一般都推薦用谷歌身份驗證器。 后來區塊鏈業務風靡 ......

    uj5u.com 2020-09-10 03:03:17 more
  • 密碼學DAY1

    目錄 ##1.1 密碼學基本概念 密碼在我們的生活中有著重要的作用,那么密碼究竟來自何方,為何會產生呢? 密碼學是網路安全、資訊安全、區塊鏈等產品的基礎,常見的非對稱加密、對稱加密、散列函式等,都屬于密碼學范疇。 密碼學有數千年的歷史,從最開始的替換法到如今的非對稱加密演算法,經歷了古典密碼學,近代密 ......

    uj5u.com 2020-09-10 03:03:50 more
  • 密碼學DAY1_02

    目錄 ##1.1 ASCII編碼 ASCII(American Standard Code for Information Interchange,美國資訊交換標準代碼)是基于拉丁字母的一套電腦編碼系統,主要用于顯示現代英語和其他西歐語言。它是現今最通用的單位元組編碼系統,并等同于國際標準ISO/IE ......

    uj5u.com 2020-09-10 03:04:50 more
  • 密碼學DAY2

    ##1.1 加密模式 加密模式:https://docs.oracle.com/javase/8/docs/api/javax/crypto/Cipher.html ECB ECB : Electronic codebook, 電子密碼本. 需要加密的訊息按照塊密碼的塊大小被分為數個塊,并對每個塊進 ......

    uj5u.com 2020-09-10 03:05:42 more
  • NTP時鐘服務器的特點(京準電子)

    NTP時鐘服務器的特點(京準電子) NTP時鐘服務器的特點(京準電子) 京準電子官V——ahjzsz 首先對時間同步進行了背景介紹,然后討論了不同的時間同步網路技術,最后指出了建立全球或區域時間同步網存在的問題。 一、概 述 在通信領域,“同步”概念是指頻率的同步,即網路各個節點的時鐘頻率和相位同步 ......

    uj5u.com 2020-09-10 03:05:47 more
  • 標準化考場時鐘同步系統推進智能化校園建設

    標準化考場時鐘同步系統推進智能化校園建設 標準化考場時鐘同步系統推進智能化校園建設 安徽京準電子科技官微——ahjzsz 一、背景概述隨著教育事業的快速發展,學校建設如雨后春筍,隨之而來的學校教育、管理、安全方面的問題成了學校管理人員面臨的最大的挑戰,這些問題同時也是學生家長所擔心的。為了讓學生有更 ......

    uj5u.com 2020-09-10 03:05:51 more
  • 位元幣入門

    引言 位元幣基本結構 位元幣基礎知識 1)哈希演算法 2)非對稱加密技術 3)數字簽名 4)MerkleTree 5)哪有位元幣,有的是UTXO 6)位元幣挖礦與共識 7)區塊驗證(共識) 總結 引言 上一篇我們已經知道了什么是區塊鏈,此篇說一下區塊鏈的第一個應用——位元幣。其實先有位元幣,后有的區塊 ......

    uj5u.com 2020-09-10 03:06:15 more
  • 北斗對時服務器(北斗對時設備)電力系統應用

    北斗對時服務器(北斗對時設備)電力系統應用 北斗對時服務器(北斗對時設備)電力系統應用 京準電子科技官微(ahjzsz) 中國北斗衛星導航系統(英文名稱:BeiDou Navigation Satellite System,簡稱BDS),因為是目前世界范圍內唯一可以大面積提供免費定位服務的系統,所以 ......

    uj5u.com 2020-09-10 03:06:20 more
最新发布
  • JAVA波場鏈TRX的USDT授權轉賬

    最近有個專案需要用到波場鏈的授權轉賬,找了各種檔案資料都沒有詳細說明,因為做交易所的時候有一個功能叫授權轉賬,比如我們充值到交易所的充值地址,其實當交易所創建這個充值地址的時候會呼叫合約approve方法把當前地址操作權限授權給交易所的熱錢包來操作當前充值地址。在參考別人轉賬代碼的基礎上實作了transferFrom功能下來來代碼/** * trc20合約地址 這個是USDT代幣 */private String contract = "TR7NHqjeKQxGTCi8q8ZY4pL8o...

    uj5u.com 2022-01-18 09:02:20 more
  • 如何在4everland中設定ENS域名托管

    前言:4EVERLAND Hosting 現在不僅支持開發者將他們的IPFS(星際檔案系統)部署系結到傳統的DNS域,還更新了支持了以太坊域名服務ENS,并且通過實作IPNS(星際名稱系統)進行ENS和IPFS哈希更新。Hosting + ENS:ENS 和 4EVERLAND 團隊都旨在成為 Web 3.0 的基礎設施,并為所有 Web 3.0 開發提供更多動力。 ENS 為網站、Dapps 和其他 Dweb 資源/服務提供去中心化、抗審查和用戶控制的域命名系統。 與由中央機構維護的 DN.....

    uj5u.com 2022-01-18 09:02:10 more
  • Web3現狀和未來:去中心化的互聯網可以提高你的生產力

    長期以來,網路有了很大的發展,其目前的應用與最初的時代幾乎不可同日而語。網路的發展大體上分為三個明確無誤的階段:網路1.0,網路2.0,和網路3.0。什么是Web 1.0?Web 1.0是網路的主要重點。大多數參與者是內容消費者,而創造者是開發者,他們創建的網站的資訊通常以文本或影像的形式呈現。網路1.0大約從1991年持續到2004年。Web 1.0由提供靜態內容而非動態HTML的網站組成。資訊和內容是由一個靜態的檔案框架而不是資料集提供的,而且目的地很少有合作。你可以把Web 1.0看作是一個只...

    uj5u.com 2022-01-18 09:01:57 more
  • 5分鐘搞懂“區塊鏈”

    下面是國家層面出臺的區塊鏈相關指導政策:正是由于國家開始重視區塊鏈技術,以及相關的產業創新發展,使得區塊鏈再次成為了人們的關注焦點。繼1024講話之后,虛擬貨幣炒作有所抬頭,部分涉嫌詐騙、非法集資、非法證券發行的金融活動有死灰復燃跡象,虛擬貨幣產業成為各地政府監管重點。翻看網上的視頻和文章,一開始解釋區塊鏈技術就會用很多非常復雜的名詞,這也使得大部分人不想花太多時間去搞懂它究竟是怎么一回事,同時騙子有了可乘之機。接下來我希望你花5分鐘閱讀這篇用小學生式的大白話,了解區塊鏈到底是什么?...

    uj5u.com 2022-01-18 09:01:35 more
  • 國瀚實業|個人如何投資理財

    說到投資理財,很多人并不生疏,那么,2022年個人如何投資理財呢?下面本文就為大家做解答。1、先保證生活再理財生活中有很多事情的發生都是難以預料的,比如說下崗失業、突發疾病、投資失敗等。而這些事情一旦發生,就會對個人和家庭的財務狀況產生非常大的影響。為了使個人和家庭的正常生活盡量不受這些未知事件的影響,我們能做的只有提前儲備好應急資金,先保證生活再進行理財活動。應急資金對于靈活性的要求非常高,在選擇儲備方式時,可以考慮以活期存款形式存放在銀行。國瀚實業是一家為用戶提供多元化投資等交易服務的理財公...

    uj5u.com 2022-01-18 09:01:21 more
  • 數字證書和交叉認證

    總結下對數字證書的理解.基本概念: 數字證書(Digital Certificate):通訊方的數字身份資訊.在通訊程序中,為了辨別訊息是否由對方發送的,會用其私鑰對其加密,而如果用對方公鑰能夠解開,說明是由對方發送來的.但是仍有被中間人攻擊的風險. 根證書(Root Certificate):在信任鏈當中最頂層的證書. 證書頒發機構(Certificate Authority):通常說的CA證書就是由CA頒發的,有一定權威性. 證書吊銷串列:(Certificate Revocation Lis...

    uj5u.com 2022-01-18 09:01:08 more
  • &ldquo;智慧+&rdquo;行業新商機 | 捷碼應用市場入駐火熱進行中

    近日,智能化倉儲管理系統、湖河長綜合管理平臺、智慧灌區管理系統等多款優秀數字軟體應用產品,免費入駐捷碼創新型軟體應用市場,攜手共同打造基于低代碼aPaaS的捷碼行業新生態,助推中國智慧城市行業、企業的數字化轉型新行程。據悉,智能化倉儲管理系統上架捷碼應用市場僅3天,就為應用上架企業帶來了4個新商機,其中2個達成了倉儲管理專案的開發合作的具體意向,專案金額高達數十萬元。隨著捷碼低代碼平臺被越來越多的企業、開發團隊使用,捷碼應用市場已累積了越來越多成熟、精選的行業應用,更有生態伙伴、合作伙伴們....

    uj5u.com 2022-01-18 09:00:54 more
  • 區塊鏈能夠應用在哪些行業

    任何發生業務資料交換的資訊化系統都可以進行鏈改,原則上區塊鏈可以應用在幾乎所有行業。目前已經落地的應用場景包含:質量溯源、公共事業繳費、供應鏈金融、供應鏈管理、著作權保護、電子存證、財務對賬、資產管理、監管系統等多個領域。目前區塊鏈非常火爆,但是落地應用場景卻不是很多,我認為并不是區塊鏈就只能局限在這些方面,可能還受到技術以外的其他原因。后續區塊鏈能應用的行業及領域,需要社會各界的力量一起去研究、去探索、去創新。添加BSN運營微信號,活動福利,一手干貨,技術交流,等待著你來發掘...........

    uj5u.com 2022-01-18 09:00:33 more
  • Fabric 各種組態檔梳理(一)

    1.core.yaml : Peer節點的示例組態檔,有六個部分(會隨版本變化略加改動)日志部分:指定模塊日志級別 peer部分:Peer服務核心配置內容 vm部分:配置鏈碼運行的環境,比如Docker容器 鏈碼部分:鏈碼相關配置 ledger部分:分類賬本配置資訊 metrics(指標)部分:系統性能度量框架2.orderer.yaml :Orderer節點示例組態檔General部分 :組態檔的基礎配置資訊部分 FileLedge部分:如果指定分類賬本型別為檔案型別,則通過該...

    uj5u.com 2022-01-18 09:00:22 more
  • 醫療大資料安全&mdash;&mdash;基于區塊鏈的委托量子云架構

    智能醫療系統解決了分子可視化、DNA分析和治療確定等復雜計算問題。這些被認為是當今超級計算機仍然面臨的復雜問題。另一方面,量子計算承諾快速、高效和可擴展的計算資源,足以在指數時間內計算大規模和復雜的操作。量子計算將充分創新計算的視角,這是一個事實。然而,它還不是一個可行的解決方案,因為它可能是罕見的和昂貴的生產。本文介紹了量子云即服務,為復雜的智能醫療計算提供高效、可伸縮和安全的解決方案。我們的創新之處在于量子終端機(QTM)和區塊鏈技術的使用,以提高提出的架構的可行性和安全性。實驗結果證明了該體系結構的...

    uj5u.com 2022-01-18 08:59:30 more