import java.util.Arrays; import java.util.Date; import org.bouncycastle.math.ec.ECPoint; import DNA.UInt256; import DNA.Core.Block; import DNA.Core.Blockchain; import DNA.Core.RecordTransaction; import DNA.Core.RegisterTransaction; import DNA.Core.Transaction; import DNA.Core.TransactionAttribute; import DNA.Core.TransactionInput; import DNA.Core.TransactionOutput; import DNA.Core.Scripts.Program; import DNA.IO.Caching.TrackableCollection; import DNA.Implementations.Wallets.SQLite.UserWallet; import DNA.Wallets.Account; import DNA.Wallets.Coin; import DNA.Wallets.Contract; import DNA.Wallets.Wallet; /** * SDK帮助类 * * @author 12146 * */ public class OnChainSDKHelper { public static String byte2str(byte[] bt) { if(bt == null || bt.length == 0) { return ""; } StringBuilder sb = new StringBuilder(); for(int i=0; i 0) { Arrays.stream(bb.transactions).forEach(p -> System.out.println(p)); Arrays.stream(bb.transactions).forEach(p -> { sb.append("\n\t").append("type:"+ p.type.toString()); sb.append("\n\t").append("version:"+p.version); sb.append("\n\t").append("nonce:"+p.nonce); sb.append("\n\t").append("attrs:"+p.attributes.length); if(p.attributes.length > 0) { Arrays.stream(p.attributes).forEach(i -> { sb.append("\n\t\t").append("usage:"+i.usage.toString()); sb.append("\n\t\t").append("data:"+toHexString(i.data)); }); } sb.append("\n\t").append("inputs:"+p.inputs.length); if(p.inputs.length > 0) { Arrays.stream(p.inputs).forEach(j -> { sb.append("\n\t\t").append("prevHash:"+j.prevHash.toString()); sb.append("\n\t\t").append("prevIndx:"+j.prevIndex); }); } sb.append("\n\t").append("outputs:"+p.outputs.length); if(p.outputs.length > 0) { Arrays.stream(p.outputs).forEach(k -> { sb.append("\n\t\t").append("assetId:"+k.assetId.toString()); sb.append("\n\t\t").append("amount:"+k.value.toLong()); sb.append("\n\t\t").append("scriptHash:"+k.scriptHash.toString()); }); } sb.append("\n\t").append("scripts:"+p.scripts.length); if(p.inputs.length > 0) { Arrays.stream(p.scripts).forEach(i -> { sb.append("\n\t\t").append("redeemScript:"+toHexString(i.parameter)); sb.append("\n\t\t").append("redeemScript:"+toHexString(i.parameter)); }); } }); } return sb.toString(); } private static void print(Block blk) { System.out.println("Height:"+blk.height); System.out.println("nonce :"+blk.nonce); System.out.println("versio:"+blk.version); System.out.println("hash :"+blk.hash()); System.out.println("nextM :"+blk.nextMiner); System.out.println("prevB :"+blk.prevBlock); System.out.println("prevB :"+blk.timestamp); System.out.println("prevB :"+System.currentTimeMillis()); System.out.println("bkTm :"+new Date(blk.timestamp * 1000L)); System.out.println("sc.toS:\n\t"+toHexString(blk.script.parameter) + "\n\t"+toHexString(blk.script.code)); System.out.println("bk.mer:"+blk.merkleRoot); System.out.println("blk.tx.len:"+blk.transactions.length); for(Transaction tx: blk.transactions) { print(tx); } } public static void printWallet(UserWallet userWallet) { print(userWallet); } private static void print(UserWallet userWallet) { System.out.println("\nts.printWallet.......................................................................[st]"); System.out.println("path:"+userWallet.getWalletPath()); int c = 0; // 1 System.out.println("accs.......................start");c = 0; for(Account acc: userWallet.getAccounts()) { System.out.println("acc......................."+(++c)); print(acc); } System.out.println(); // 2 System.out.println("contracts.......................start");c = 0; for(Contract con: userWallet.getContracts()) { System.out.println("contract......................."+(++c)); print(con); } System.out.println(); // 3 System.out.println("trans....................start");c = 0; for(Transaction tx: userWallet.LoadTransactions().keySet()) { System.out.println("tran...................."+(++c)); print(tx); } System.out.println(); // 4 long amount = 0L; System.out.println("findCoins........................start"); c=0; for(Coin coin: userWallet.findCoins()) { System.out.println("coin............."+(++c)); print(coin); amount += coin.value.toLong(); } System.out.println("SpentAmount:"+amount); System.out.println(); // 5 amount = 0L; System.out.println("findUnspentCoins.................start");c=0; for(Coin coin: userWallet.findUnspentCoins()) { System.out.println("unspent........."+(++c)); print(coin); amount += coin.value.toLong(); System.out.println(coin.value + "----" + amount); } System.out.println("UnspentAmount:"+amount); System.out.println(); System.out.println("\nts.printWallet.......................................................................[ed]"); } public static String getbyteStr(byte[] bs) { StringBuilder sb = new StringBuilder(); for(byte b: bs) { sb.append(" ").append(Byte.toUnsignedInt(b)); } return sb.substring(1); } public static void print(Account acc) { // addr System.out.println("acc..................st"); System.out.println("acc.addr:"+Wallet.toAddress(Program.toScriptHash(Contract.createSignatureRedeemScript(acc.publicKey)))); System.out.println("acc.uint:"+Program.toScriptHash(Contract.createSignatureRedeemScript(acc.publicKey)).toString()); System.out.println("acc.uint(byte):"+getbyteStr(Program.toScriptHash(Contract.createSignatureRedeemScript(acc.publicKey)).toArray())); System.out.println("acc.uint(hex):"+toHexString(Program.toScriptHash(Contract.createSignatureRedeemScript(acc.publicKey)).toArray())); // pubKey ECPoint pubKey = acc.publicKey; String pubKeyStr = toHexString(acc.publicKey.getEncoded(true)); System.out.println(String.format("acc.PubKey:\n\tECPoint: %s\n\tPubKStr:%s", pubKey, pubKeyStr)); // priKey String priKey = toHexString(acc.privateKey); System.out.println(String.format("acc.PriKey:\n\tHEX:%s", priKey)); String wif = acc.export(); System.out.println(String.format("\tWIF:%s", wif)); // pubKeyHash System.out.println("acc.PubKeyHash:"+acc.publicKeyHash.toString()); System.out.println("acc..................ed"); } public static void print(Contract con) { System.out.println("contract.address:"+con.address()); System.out.println("contract.publicKey:"+con.publicKeyHash.toString()); } public static void print(Coin coin) { System.out.println("coin.addr:"+coin.address()); System.out.println("coin.toSt:"+coin.toString()); System.out.println("coin.assetId:"+coin.assetId.toString()); System.out.println("coin.scriptHash:"+coin.scriptHash); System.out.println("coin.value:"+coin.value.toString()); System.out.println("coin.state:"+coin.getState()); System.out.println("coin.TrackState:"+coin.getTrackState()); System.out.println("coin.input.prevHash:"+coin.input.prevHash); } public static void print(TrackableCollection coins, String key) { System.out.println("Wallet.print.coins.......................[start]............."+key); coins.forEach(p -> { System.out.println("1:"+p.assetId); System.out.println("2:"+p.input.prevHash.toString()); System.out.println("3:"+p.scriptHash.toString()); System.out.println("4:"+p.value); System.out.println("5:"+p.address()); System.out.println("6:"+p.getState()); System.out.println("7:"+p.getTrackState()); System.out.println("8:"+p.key().prevHash); }); System.out.println("Wallet.print.coins.......................[end]................"+key); } public static void print(String str) { System.out.println(str); } }