USDT钱包归集

https://zhuanlan.zhihu.com/p/44556999

最近几天在对接USDT钱包,遇到一个问题就是根本没办法通过omni 钱包提供的API来实现钱包归集,因为API提供的接口都需要发送USDT的地址有一定的BTC数量才可以发送交易,所以没办只能找其他方案替代,请教了其他人后才知道只能通过创建BTC的原生交易才能达到这个效果,折腾了好几天,终于把这个流程给整理通顺了,估计还有很多人会遇到这个问题,所以记录下来为后面的人节省一些时间。

1、准备两个地址

首先两个地址, 发送USDT(地址里面要有USDT,这里通常可能是交易所用户的USDT钱包地址)地址和付手续费的地址(地址里面要有足够的BTC,这里通常可能是热钱包地址)

本次案例中

发送USDT地址为: mn7w1M4fwJzRr4zYy5dMSSfBg1ZC9e4xH4

付手续费地址为: muPuXyRqLBRf8Xyj28d2As8ya4iaw8XWGe

接收USDT地址为:muPuXyRqLBRf8Xyj28d2As8ya4iaw8XWGe

2、分别找到发送地址 和热钱包地址的一笔UXTO 作为发送USDT交易的载体

指令:listunspent 0 999999 '["mn7w1M4fwJzRr4zYy5dMSSfBg1ZC9e4xH4"]'

得到UXTO:

{

"txid": "7ef4ca48422fbd055eb7375145cb59bdadaba13caf29b4279c506a7ba846a33e",

"vout": 0,

"address": "mn7w1M4fwJzRr4zYy5dMSSfBg1ZC9e4xH4",

"scriptPubKey": "76a914486e3cf761cc47642135140da02669c04dd2451088ac",

"amount": 0.00081189,

"confirmations": 31103,

"spendable": true,

"solvable": true

}

指令:listunspent 0 999999 '["muPuXyRqLBRf8Xyj28d2As8ya4iaw8XWGe"]'

得到UXTO:

{

"txid": "0b381b15082156911ca8db2761910fe9545356778d70dd09be30fc0bece9ed9d",

"vout": 1,

"address": "muPuXyRqLBRf8Xyj28d2As8ya4iaw8XWGe",

"account": "sys",

"scriptPubKey": "76a914983c8b990aef5747bdef1f2bf3a49d29b19ae15788ac",

"amount": 0.00992750,

"confirmations": 4137,

"spendable": true,

"solvable": true

}

3、创建负载

指令:

createrawtransaction '[{"txid":"7ef4ca48422fbd055eb7375145cb59bdadaba13caf29b4279c506a7ba846a33e","vout":0},{"txid":"0b381b15082156911ca8db2761910fe9545356778d70dd09be30fc0bece9ed9d","vout":1,"scriptPubKey":"76a914983c8b990aef5747bdef1f2bf3a49d29b19ae15788ac","value": 0.00992750}]' '{}'

得到:

01000000023ea346a87b6a509c27b429af3ca1abadbd59cb455137b75e05bd2f4248caf47e0000000000ffffffff9dede9ec0bfc30be09dd708d77565354e90f916127dba81c91562108151b380b0100000000ffffffff0000000000

4、创建USDT交易

指令(代币ID,发送代币数量):omni_createpayload_simplesend 31 2.0

得到:000000000000000100000000001e8480

5、在交易上绑定代币数据

指令:

omni_createrawtx_opreturn 01000000023ea346a87b6a509c27b429af3ca1abadbd59cb455137b75e05bd2f4248caf47e0000000000ffffffff9dede9ec0bfc30be09dd708d77565354e90f916127dba81c91562108151b380b0100000000ffffffff0000000000 000000000000000100000000001e8480

得到(事务hash):

01000000023ea346a87b6a509c27b429af3ca1abadbd59cb455137b75e05bd2f4248caf47e0000000000ffffffff9dede9ec0bfc30be09dd708d77565354e90f916127dba81c91562108151b380b0100000000ffffffff010000000000000000166a146f6d6e69000000000000000100000000001e848000000000

6、在交易上添加接收地址

指令:

omni_createrawtx_reference 01000000023ea346a87b6a509c27b429af3ca1abadbd59cb455137b75e05bd2f4248caf47e0000000000ffffffff9dede9ec0bfc30be09dd708d77565354e90f916127dba81c91562108151b380b0100000000ffffffff010000000000000000166a146f6d6e69000000000000000100000000001e848000000000 muPuXyRqLBRf8Xyj28d2As8ya4iaw8XWGe

得到(事务hash):01000000023ea346a87b6a509c27b429af3ca1abadbd59cb455137b75e05bd2f4248caf47e0000000000ffffffff9dede9ec0bfc30be09dd708d77565354e90f916127dba81c91562108151b380b0100000000ffffffff020000000000000000166a146f6d6e69000000000000000100000000001e848022020000000000001976a914983c8b990aef5747bdef1f2bf3a49d29b19ae15788ac00000000

7、在交易上指定矿工费用

指令:(事务HASH,交易信息,找零地址,手续费)

omni_createrawtx_change 01000000023ea346a87b6a509c27b429af3ca1abadbd59cb455137b75e05bd2f4248caf47e0000000000ffffffff9dede9ec0bfc30be09dd708d77565354e90f916127dba81c91562108151b380b0100000000ffffffff020000000000000000166a146f6d6e69000000000000000100000000001e848022020000000000001976a914983c8b990aef5747bdef1f2bf3a49d29b19ae15788ac00000000 '[{"txid":"7ef4ca48422fbd055eb7375145cb59bdadaba13caf29b4279c506a7ba846a33e","vout":1,"scriptPubKey":"76a914486e3cf761cc47642135140da02669c04dd2451088ac","value": 0.0002},{"txid":"0b381b15082156911ca8db2761910fe9545356778d70dd09be30fc0bece9ed9d","vout":1,"scriptPubKey":"76a914983c8b990aef5747bdef1f2bf3a49d29b19ae15788ac","value": 0.0002}]' muPuXyRqLBRf8Xyj28d2As8ya4iaw8XWGe 0.0002

得到(事务hash):

01000000023ea346a87b6a509c27b429af3ca1abadbd59cb455137b75e05bd2f4248caf47e0000000000ffffffff9dede9ec0bfc30be09dd708d77565354e90f916127dba81c91562108151b380b0100000000ffffffff020000000000000000166a146f6d6e69000000000000000100000000001e848022020000000000001976a914983c8b990aef5747bdef1f2bf3a49d29b19ae15788ac00000000

8、对交易签名

指令:

signrawtransaction 01000000023ea346a87b6a509c27b429af3ca1abadbd59cb455137b75e05bd2f4248caf47e0000000000ffffffff9dede9ec0bfc30be09dd708d77565354e90f916127dba81c91562108151b380b0100000000ffffffff020000000000000000166a146f6d6e69000000000000000100000000001e848022020000000000001976a914983c8b990aef5747bdef1f2bf3a49d29b19ae15788ac00000000

得到(区块信息):

{

"hex": "01000000023ea346a87b6a509c27b429af3ca1abadbd59cb455137b75e05bd2f4248caf47e000000006b483045022100d790995554bbda790f44db19a6e59e84ab5c2ab27577be1c406f09e76d6e7fe402204db6ef71c96a22fd91e230787a521c47e3acc0a9b66dae2b08151ef74c1a0e5e012103ad3414464aec8d4f0cdc3fd2540a255c0bc8f20d157f6aa39ce67564e92d3077ffffffff9dede9ec0bfc30be09dd708d77565354e90f916127dba81c91562108151b380b010000006a473044022073d01e964d0a94540adc5d9db778d2b768043ba071cf5f49af2c2b07a99f6db702202e9870ac127e0ba06226c69242016255e9230816d6eab96ca89ad968111a49a7012103e6f952da72a83b16443d70dbb2e30473b25d6c71a6fdc01fbfbf0638805b4218ffffffff020000000000000000166a146f6d6e69000000000000000100000000001e848022020000000000001976a914983c8b990aef5747bdef1f2bf3a49d29b19ae15788ac00000000",

"complete": true

}

9、广播交易

指令:

Sendrawtransaction 01000000023ea346a87b6a509c27b429af3ca1abadbd59cb455137b75e05bd2f4248caf47e000000006b483045022100d790995554bbda790f44db19a6e59e84ab5c2ab27577be1c406f09e76d6e7fe402204db6ef71c96a22fd91e230787a521c47e3acc0a9b66dae2b08151ef74c1a0e5e012103ad3414464aec8d4f0cdc3fd2540a255c0bc8f20d157f6aa39ce67564e92d3077ffffffff9dede9ec0bfc30be09dd708d77565354e90f916127dba81c91562108151b380b010000006a473044022073d01e964d0a94540adc5d9db778d2b768043ba071cf5f49af2c2b07a99f6db702202e9870ac127e0ba06226c69242016255e9230816d6eab96ca89ad968111a49a7012103e6f952da72a83b16443d70dbb2e30473b25d6c71a6fdc01fbfbf0638805b4218ffffffff020000000000000000166a146f6d6e69000000000000000100000000001e848022020000000000001976a914983c8b990aef5747bdef1f2bf3a49d29b19ae15788ac00000000

得到(交易ID):

ab28fcd449d1f8e57ead070d798d80fe8f962168341b383adf5bf07fe80e652d

注意:每次操作后可用指令:

decoderawtransaction 事务ID 和 omni_decodetransaction 事务ID来查看当前构建的交易信息情况。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
归集BSC链上的USDT,您需要执行以下步骤: 1. 创建BSC钱包地址并获取私钥。 2. 使用Binance Smart Chain的RPC接口连接到BSC网络。 3. 使用USDT的合约地址和ABI,调用USDT合约的transfer方法将USDT从原地址转移到BSC钱包地址。 以下是Java代码示例: ```java import java.math.BigInteger; import java.util.Arrays; import org.web3j.abi.FunctionEncoder; import org.web3j.abi.FunctionReturnDecoder; import org.web3j.abi.TypeReference; import org.web3j.abi.datatypes.Function; import org.web3j.abi.datatypes.Type; import org.web3j.abi.datatypes.generated.Uint256; import org.web3j.crypto.Credentials; import org.web3j.protocol.Web3j; import org.web3j.protocol.core.DefaultBlockParameterName; import org.web3j.protocol.core.methods.request.Transaction; import org.web3j.protocol.core.methods.response.EthGetTransactionCount; import org.web3j.protocol.core.methods.response.EthSendTransaction; import org.web3j.protocol.http.HttpService; import org.web3j.tx.RawTransactionManager; import org.web3j.utils.Convert; import org.web3j.utils.Numeric; public class USDTTransfer { public static void main(String[] args) throws Exception { // BSC钱包地址和私钥 String fromAddress = "0x..."; String privateKey = "..."; Credentials credentials = Credentials.create(privateKey); // BSC节点地址 String bscRpcUrl = "https://bsc-dataseed.binance.org/"; Web3j web3j = Web3j.build(new HttpService(bscRpcUrl)); // USDT合约地址和ABI String usdtContractAddress = "0x..."; String usdtContractAbi = "[{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_spender\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"balance\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"},{\"name\":\"_spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"remaining\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"initialSupply\",\"type\":\"uint256\"},{\"name\":\"tokenName\",\"type\":\"string\"},{\"name\":\"decimalUnits\",\"type\":\"uint8\"},{\"name\":\"tokenSymbol\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_spender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"}]"; // 获取USDT的decimals参数 Function decimalsFunction = new Function("decimals", Arrays.asList(), Arrays.asList(new TypeReference<Uint256>() {})); String encodedDecimals = FunctionEncoder.encode(decimalsFunction); org.web3j.protocol.core.methods.response.EthCall decimalsCall = web3j.ethCall(Transaction.createEthCallTransaction(fromAddress, usdtContractAddress, encodedDecimals), DefaultBlockParameterName.LATEST).send(); String decimalsHex = decimalsCall.getValue(); int decimals = Integer.parseInt(Numeric.cleanHexPrefix(decimalsHex), 16); // 转移USDT的数量 BigInteger amount = Convert.toWei("1", Convert.Unit.ETHER).multiply(BigInteger.TEN.pow(decimals)); // 获取BSC钱包地址的nonce EthGetTransactionCount ethGetTransactionCount = web3j.ethGetTransactionCount(fromAddress, DefaultBlockParameterName.LATEST).send(); BigInteger nonce = ethGetTransactionCount.getTransactionCount(); // 构造USDT转移交易数据 Function transferFunction = new Function("transfer", Arrays.asList(credentials.getAddress(), new Uint256(amount)), Arrays.asList(new TypeReference<Type>() {})); String encodedTransfer = FunctionEncoder.encode(transferFunction); // 使用USDT合约地址、nonce、gasPrice、gasLimit和交易数据构造交易 BigInteger gasPrice = Convert.toWei("5", Convert.Unit.GWEI).toBigInteger(); BigInteger gasLimit = BigInteger.valueOf(100000); Transaction transaction = Transaction.createFunctionCallTransaction(fromAddress, nonce, gasPrice, gasLimit, usdtContractAddress, encodedTransfer); // 签名交易并发送到BSC网络 RawTransactionManager rawTransactionManager = new RawTransactionManager(web3j, credentials); EthSendTransaction ethSendTransaction = rawTransactionManager.signAndSend(transaction); String transactionHash = ethSendTransaction.getTransactionHash(); System.out.println("USDT transfer transaction hash: " + transactionHash); } } ``` 请注意,您需要将代码中的钱包地址、私钥、USDT合约地址和ABI替换为您自己的值,并确保您的钱包具有足够的USDT余额以支付交易费用。此外,gasPrice和gasLimit参数应根据当前网络状况进行调整以确保交易能够成功被打包。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值