java怎么实现Omni core USDT离线签名交易

资讯 2024-06-20 阅读:91 评论:0
发布时间:2022-01-06 16:40:54 来源:亿速云...
美化布局示例

欧易(OKX)最新版本

【遇到注册下载问题请加文章最下面的客服微信】永久享受返佣20%手续费!

APP下载   全球官网 大陆官网

币安(Binance)最新版本

币安交易所app【遇到注册下载问题请加文章最下面的客服微信】永久享受返佣20%手续费!

APP下载   官网地址

火币HTX最新版本

火币老牌交易所【遇到注册下载问题请加文章最下面的客服微信】永久享受返佣20%手续费!

APP下载   官网地址
发布时间:2022-01-06 16:40:54 来源:亿速云 阅读:206 作者:iii 栏目:互联网科技

本篇内容主要讲解“java怎么实现Omni core USDT离线签名交易 ”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java怎么实现Omni core USDT离线签名交易 ”吧!

背景:

Background:

    1.主要是对区块链离线交易进行utxo上链。

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 1.

    2.对usdt地址下的全部币进行汇集交易,单独由btc进行手续费支付

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 2. Merger transactions for all currencies under the Usdt address, to be paid separately by btc

一、对于如何查看一个unspent 交易: 

i. For how to view an unspent transaction: & nbsp;

      1.调用钱包的 unspent接口

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 1. Unspent interface to call wallets

      2.调用三方区块链浏览器的接口 例如:(blockchain : https://blockchain.info/unspent?active=35nNMpckrvuaryxFSiUd6jLvLGXJCWUyAY)

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 2. For example: (blockchain: https://blockchain.info/unspent?active=35nNpckrvuaryxFSiUd6jLGXCWuyAY)


 java怎么实现Omni core USDT离线签名交易


& nbsp; How Java accomplishes Omni core USDT offline signature transactions

拿到钱包地址的unspentUTXO即可进行离线交易获取签名信息了 ,直接上代码:

UnspentUTXO with wallet address can do offline transactions to get signature information & nbsp; direct to code:

<dependency>
	<groupId>org.bitcoinj</groupId>
	<artifactId>bitcoinj-tools</artifactId>
	<version>0.14.7</version>
</dependency>
<dependency>
	<groupId>org.bitcoinj</groupId>
	<artifactId>bitcoinj-examples</artifactId>
	<version>0.14.7</version>
</dependency>
<dependency>
	<groupId>org.bitcoinj</groupId>
	<artifactId>bitcoinj-core</artifactId>
	<version>0.14.7</version>
</dependency>

UnspentUtxo:

package com.bscoin.coldwallet.cointype.common;
 
import java.io.Serializable;
 
public class UnSpentUtxo implements Serializable {
	    
	private static final long serialVersionUID = -7417428486644921613L;
	
	private String hash; //未交易hash
	private long txN; 
	private long value;//金额
	private int height; //高度
	private String script;//签名
	private String address;//钱包地址
	
	public String getHash() {
		return hash;
	}
	public void setHash(String hash) {
		this.hash = hash;
	}
	public long getTxN() {
		return txN;
	}
	public void setTxN(long txN) {
		this.txN = txN;
	}
	public long getValue() {
		return value;
	}
	public void setValue(long value) {
		this.value = value;
	}
	public int getHeight() {
		return height;
	}
	public void setHeight(int height) {
		this.height = height;
	}
	public String getScript() {
		return script;
	}
	public void setScript(String script) {
		this.script = script;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	
}

Transaction:

package com.bscoin.coldwallet.cointype.usdt;
 
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
import org.apache.commons.codec.binary.Hex;
import org.apache.commons.configuration2.Configuration;
import org.bitcoinj.core.Address;
import org.bitcoinj.core.AddressFormatException;
import org.bitcoinj.core.Coin;
import org.bitcoinj.core.Context;
import org.bitcoinj.core.DumpedPrivateKey;
import org.bitcoinj.core.ECKey;
import org.bitcoinj.core.NetworkParameters;
import org.bitcoinj.core.ScriptException;
import org.bitcoinj.core.Sha256Hash;
import org.bitcoinj.core.Transaction;
import org.bitcoinj.core.TransactionOutPoint;
import org.bitcoinj.core.UTXO;
import org.bitcoinj.core.Utils;
import org.bitcoinj.params.MainNetParams;
import org.bitcoinj.params.TestNet3Params;
import org.bitcoinj.script.Script;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
 
import com.alibaba.fastjson.JSON;
import com.bscoin.coldwallet.cointype.common.ConfigUtil;
import com.bscoin.coldwallet.cointype.common.UnSpentUtxo;
 
import org.bitcoinj.core.TransactionConfidence;
 
  
  
public class RawTransaction {
	
	private static Logger LOG = LoggerFactory.getLogger(RawTransaction.class);
	static NetworkParameters params;
	
	static {
		try {
			Configuration config = ConfigUtil.getInstance();
			params = config.getBoolean("usdtcoin.testnet") ? TestNet3Params.get() : MainNetParams.get();
			LOG.info("=== [USDT] usdtcoin  client networkID:{} ===", params.getId());
		} catch (Exception e) {
			LOG.info("=== [USDT] com.bscoin.coldwallet.cointype.usdt.RawTransaction:{} ===", e.getMessage(), e);
		}
	}
	
	  
	  
	    
	public static String createRawTransaction(String privBtcKey, String btcAddress, String privUsdtKey, String recevieUsdtAddr, String formUsdtAddr, long fee, String omniHex, List<UnSpentUtxo> unBtcUtxos, List<UnSpentUtxo> unUsdtUtxos) {
		List<UTXO> btcUtxos = new ArrayList<UTXO>();
		List<UTXO> usdtUtxos = new ArrayList<UTXO>();
		try {
			if (!unBtcUtxos.isEmpty() && !unUsdtUtxos.isEmpty()) {
					// find a btc eckey info
					DumpedPrivateKey btcPrivateKey = DumpedPrivateKey.fromBase58(params, privBtcKey);
					ECKey btcKey = btcPrivateKey.getKey();
					// a usdt eckey info
					DumpedPrivateKey usdtPrivateKey = DumpedPrivateKey.fromBase58(params, privUsdtKey);
					ECKey usdtKey = usdtPrivateKey.getKey();
					
					// receive address
					Address receiveAddress = Address.fromBase58(params, recevieUsdtAddr);
					// create a transaction
					Transaction tx = new Transaction(params);
					// odd address
					Address oddAddress = Address.fromBase58(params, btcAddress);
					// 如果需要找零 消费列表总金额 - 已经转账的金额 - 手续费
					long value_btc = unBtcUtxos.stream().mapToLong(UnSpentUtxo::getValue).sum();
					long value_usdt = unUsdtUtxos.stream().mapToLong(UnSpentUtxo::getValue).sum();
					// 总输入 - 手续费 - 546 -546 = 找零金额
					long leave = (value_btc + value_usdt) - fee - 1092;
					if (leave > 0) {
						tx.addOutput(Coin.valueOf(leave), oddAddress);
					}
					
					// usdt transaction
					tx.addOutput(Coin.valueOf(546), new Script(Utils.HEX.decode(omniHex)));
					// send to address
					tx.addOutput(Coin.valueOf(546), receiveAddress);
					
					// btc utxos is an array of inputs from my wallet
					for (UnSpentUtxo unUtxo : unBtcUtxos) {
						btcUtxos.add(new UTXO(Sha256Hash.wrap(unUtxo.getHash()), unUtxo.getTxN(), Coin.valueOf(unUtxo.getValue()), unUtxo.getHeight(), false, new Script(Utils.HEX.decode(unUtxo.getScript())), unUtxo.getAddress()));
					}
					// usdt utxos is an array of inputs from my wallet
					for (UnSpentUtxo unUtxo : unUsdtUtxos) {
						usdtUtxos.add(new UTXO(Sha256Hash.wrap(unUtxo.getHash()), unUtxo.getTxN(), Coin.valueOf(unUtxo.getValue()), unUtxo.getHeight(), false, new Script(Utils.HEX.decode(unUtxo.getScript())), unUtxo.getAddress()));
					}
					
					// create usdt utxo data
					for (UTXO utxo : usdtUtxos) {
						TransactionOutPoint outPoint = new TransactionOutPoint(params, utxo.getIndex(), utxo.getHash());
						tx.addSignedInput(outPoint, utxo.getScript(), usdtKey, Transaction.SigHash.ALL, true);
					}
					
					// create btc utxo data
					for (UTXO utxo : btcUtxos) {
						TransactionOutPoint outPoint = new TransactionOutPoint(params, utxo.getIndex(), utxo.getHash());
						tx.addSignedInput(outPoint, utxo.getScript(), btcKey, Transaction.SigHash.ALL, true);
					}
					
					Context context = new Context(params);
					tx.getConfidence().setSource(TransactionConfidence.Source.NETWORK);
					tx.setPurpose(Transaction.Purpose.USER_PAYMENT);
					
					LOG.info("=== [USDT] sign success,hash is :{} ===", tx.getHashAsString());
					return new String(Hex.encodeHex(tx.bitcoinSerialize()));
			}
		} catch (Exception e) {
			LOG.info("=== com.bscoin.coldwallet.cointype.usdt.RawTransaction.createRawTransaction(String, String, String, String, String, long, String, List<UnSpentUtxo>, List<UnSpentUtxo>):{}  ===",
						   e.getMessage(), e);
		}
		return null;
	}
	
	public static void main(String[] args) {
		Map m = new HashMap();
		List<UnSpentUtxo> us = new ArrayList<UnSpentUtxo>();
		UnSpentUtxo u = new UnSpentUtxo();
		u.setAddress("mvEtuEqYPMrLaKjJ5nTZ57vQAoYUtVmMaQ");
		u.setHash("d235e908767d4bbf579e04ae768fa16298c8ccb2dc406f1cda90341477ccbb3f");
		u.setHeight(1413239);
		u.setScript("76a914a1806613a51a81966779e2fa1537013cf4cd2b1788ac");
		u.setTxN(0);
		u.setValue(300000);
		
		UnSpentUtxo u1 = new UnSpentUtxo();
		u1.setAddress("mvEtuEqYPMrLaKjJ5nTZ57vQAoYUtVmMaQ");
		u1.setHash("d74b16fd8e548e467bd1f4ce1214037fc6087bb7bf4f15cfa684d03d1cb2eda4");
		u1.setHeight(1413334);
		u1.setScript("76a914a1806613a51a81966779e2fa1537013cf4cd2b1788ac");
		u1.setTxN(1);
		u1.setValue(300000);
		
		us.add(u);
		us.add(u1);
		
		List<UnSpentUtxo> us2 = new ArrayList<UnSpentUtxo>();
		UnSpentUtxo u3 = new UnSpentUtxo();
		u3.setAddress("moUseQWZenTkU3a2bCZydth4CUUZqNY6Fk");
		u3.setHash("bd6da7714f1eb5f36e62070bc8463f8d574b98083a0df872285d291417b3afe3");
		u3.setHeight(1413334);
		u3.setScript("76a914575c4b21030d58d02c434fc36f66a866142e74ce88ac");
		u3.setTxN(1);
		u3.setValue(546);
		us2.add(u3);
		
		m.put("btcUtxo", us);
		m.put("usdtUtxo", us2);
		m.put("omniHex", "6a146f6d6e6900000000000000010000000059682f00");
		
		System.out.println("传输参数:">

获取OmniHex:

Get OmniHex:

     调用RPC: get_balance 、 omni_createpayload_simplesend 、 omni_createrawtx_opreturn

& nbsp; & nbsp; & nbsp; call RPC: get_balance,   omni_createpayload_simplesend, & nbsp; omni_createrawtx_open

java怎么实现Omni core USDT离线签名交易

how Java accomplishes Omni core USDT offline signature transaction

到此,相信大家对“java怎么实现Omni core USDT离线签名交易 ”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

美化布局示例

欧易(OKX)最新版本

【遇到注册下载问题请加文章最下面的客服微信】永久享受返佣20%手续费!

APP下载   全球官网 大陆官网

币安(Binance)最新版本

币安交易所app【遇到注册下载问题请加文章最下面的客服微信】永久享受返佣20%手续费!

APP下载   官网地址

火币HTX最新版本

火币老牌交易所【遇到注册下载问题请加文章最下面的客服微信】永久享受返佣20%手续费!

APP下载   官网地址
文字格式和图片示例

注册有任何问题请添加 微信:MVIP619 拉你进入群

弹窗与图片大小一致 文章转载注明

分享:

扫一扫在手机阅读、分享本文

发表评论
平台列表
美化布局示例

欧易(OKX)

  全球官网 大陆官网

币安(Binance)

  官网

火币(HTX)

  官网

Gate.io

  官网

Bitget

  官网

deepcoin

  官网
热门文章
  • 支付領域投下震撼彈!美國數位銀行Chime疑與GuardPay 神盾支付合作!

    支付領域投下震撼彈!美國數位銀行Chime疑與GuardPay 神盾支付合作!
    2020年,新冠肺炎(COVID-19)疫情加速數位貨幣進展。例如:2019年4月,國際清算銀行(BIS)的調查顯示,在全球66家中央銀行中,沒有一家計畫發行跨境支付的數位貨幣。惟到了2020年10月,BIS支付委員會主席康利夫(Jon Cunliffe)指出,肺炎疫情拉高民眾對無現金支付的需求,迫使各國加快數位貨幣的研發進程日本與韓國於2021年進入數位貨幣試驗階段。直到2019年12月,美國聯邦準備理事會(Fed)都尚無數位貨幣規劃,惟到了2020年2月,Fed已開始研擬...
  • 区块链:交易系统开发指南

    区块链:交易系统开发指南
    播报编辑《区块链:交易系统开发指南》使用通俗易懂的语言,从技术的角度详细介绍了区块链交易系统应有的功能架构及工作原理,让人们能够张开双臂轻松地拥抱区块链技术,享受区块链交易系统带来的惊喜与成就感。《区块链:交易系统开发指南》共分 7 章,第 1~2 章主要介绍区块链及数字货币的基本概念,以及各种公有链的 API 接口;第3~5 章主要介绍区块链交易系统的分类架构及功能; 6 章主要介绍区块链交易系统面临的问题及演进方向;第 7 章对全书做了总结。《区块链:交易系统开发指南》是...
  • 5.14加密货币价格:BTC突破6.2万美元以太坊和山寨币反映市场情绪

    5.14加密货币价格:BTC突破6.2万美元以太坊和山寨币反映市场情绪
    今天,随着比特币(BTC)的价格突破62 000美元的门槛,顶级加密货币的价格反弹了。 此外,以铁大幅上涨,维持在2 900美元的水平。 此外,其他顶尖山硬币,如索拉纳(SOL )、XRP、卡达诺(ADA )也大幅上涨。    今天密钥加密货币价格 1. 比特币价格    在5月14日星期二撰写本文时,比特币价格上升了2.57%,达到62 487.50美元。 另一方面,在过去24小时内,交易量从65.26 % 急剧上升至277亿美元。 与此同时,加密货币的市场价值为...
  • OKEx回应用户质疑:合约交易非期货 平台无机器人

    OKEx回应用户质疑:合约交易非期货 平台无机器人
       热点点 自选股份 数据中心 数据中心 研究和资料中心 资金流动 模拟交易 客户客户 具体来说,OKEx回答用户的问题:合同交易不是期货,平台不是机器人。 金融同步化,3月22日。    昨天下午,OKEx公司就维护先前用户线下的权利问题对同步财务公司作出了回应,指出OKEx公司提供的合同交易不是期货交易,在旗下的业务中没有正式的机器人。 同时,OKEX称,它不会以非法为由对任何投资损失索赔作出答复。 答复全文如下: 同步你的财务! 近日来,...
  • 0.00006694个比特币等于多少人民币/美金

    0.00006694个比特币等于多少人民币/美金
    0.00006694比特币等于多少人民币?根据比特币对人民币的最新汇率,0.00006694比特币等于4.53424784美元/32.5436 16人民币。比特币(BTC)美元(USDT)人民币(CNY)0.000066944.53424784【比特币密码】32.82795436 16比特币对人民币的最新汇率为:490408.64 CNY(1比特币=490408.64人民币)(1美元=7.24人民币)(0.00006694USDT=0.0004846456 CNY)汇率更新时...
标签列表