Search in sources :

Example 1 with UnspentOutputWithKey

use of com.samourai.whirlpool.client.tx0.UnspentOutputWithKey in project samourai-wallet-android by Samourai-Wallet.

the class NewPoolActivity method beginTx0.

private Completable beginTx0(List<UTXOCoin> coins) {
    return Completable.fromCallable(() -> {
        Optional<WhirlpoolWallet> whirlpoolWalletOpt = AndroidWhirlpoolWalletService.getInstance().getWhirlpoolWallet();
        if (!whirlpoolWalletOpt.isPresent()) {
            return true;
        }
        WhirlpoolWallet whirlpoolWallet = whirlpoolWalletOpt.get();
        Collection<UnspentOutputWithKey> spendFroms = new ArrayList<UnspentOutputWithKey>();
        for (UTXOCoin coin : coins) {
            UnspentResponse.UnspentOutput unspentOutput = new UnspentResponse.UnspentOutput();
            unspentOutput.addr = coin.address;
            unspentOutput.script = Hex.toHexString(coin.getOutPoint().getScriptBytes());
            unspentOutput.confirmations = coin.getOutPoint().getConfirmations();
            unspentOutput.tx_hash = coin.getOutPoint().getTxHash().toString();
            unspentOutput.tx_output_n = coin.getOutPoint().getTxOutputN();
            unspentOutput.value = coin.amount;
            unspentOutput.xpub = new UnspentResponse.UnspentOutput.Xpub();
            unspentOutput.xpub.path = "M/0/0";
            ECKey eckey = SendFactory.getPrivKey(coin.address, account);
            UnspentOutputWithKey spendFrom = new UnspentOutputWithKey(unspentOutput, eckey.getPrivKeyBytes());
            spendFroms.add(spendFrom);
        }
        if (selectedPoolPriority == PoolCyclePriority.HIGH) {
            tx0FeeTarget = Tx0FeeTarget.BLOCKS_2;
        } else if (selectedPoolPriority == PoolCyclePriority.NORMAL) {
            tx0FeeTarget = Tx0FeeTarget.BLOCKS_6;
        } else if (selectedPoolPriority == PoolCyclePriority.LOW) {
            tx0FeeTarget = Tx0FeeTarget.BLOCKS_24;
        }
        com.samourai.whirlpool.client.whirlpool.beans.Pool pool = whirlpoolWallet.findPoolById(selectedPoolViewModel.getPoolId());
        Tx0Config tx0Config;
        if (account == WhirlpoolMeta.getInstance(getApplicationContext()).getWhirlpoolPostmix()) {
            tx0Config = whirlpoolWallet.getTx0Config().setChangeWallet(WhirlpoolWalletAccount.POSTMIX);
        } else {
            tx0Config = whirlpoolWallet.getTx0Config().setChangeWallet(WhirlpoolWalletAccount.DEPOSIT);
        }
        Tx0 tx0 = null;
        try {
            tx0 = whirlpoolWallet.tx0(pool, spendFroms, tx0Config, tx0FeeTarget);
            final String txHash = tx0.getTx().getHashAsString();
            // tx0 success
            if (tx0.getChangeOutput() != null) {
                Log.i("NewPoolActivity", "change:" + tx0.getChangeOutput().toString());
                Log.i("NewPoolActivity", "change index:" + tx0.getChangeOutput().getIndex());
                UTXOUtil.getInstance().add(txHash + "-" + tx0.getChangeOutput().getIndex(), "\u2623 tx0 change\u2623");
                UTXOUtil.getInstance().addNote(txHash, "tx0");
                if (blockChangeOutput) {
                    if (account == WhirlpoolMeta.getInstance(getApplicationContext()).getWhirlpoolPostmix()) {
                        BlockedUTXO.getInstance().addPostMix(txHash, tx0.getChangeOutput().getIndex(), tx0.getChangeValue());
                    } else {
                        BlockedUTXO.getInstance().add(txHash, tx0.getChangeOutput().getIndex(), tx0.getChangeValue());
                    }
                }
            }
            NewPoolActivity.this.runOnUiThread(new Runnable() {

                public void run() {
                    Toast.makeText(NewPoolActivity.this, txHash, Toast.LENGTH_SHORT).show();
                }
            });
            Log.i("NewPoolActivity", "result:" + txHash);
        } catch (Exception e) {
            // tx0 failed
            NewPoolActivity.this.runOnUiThread(new Runnable() {

                public void run() {
                    Toast.makeText(NewPoolActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
                }
            });
            Log.i("NewPoolActivity", "result:" + e.getMessage());
        }
        return true;
    });
}
Also used : ArrayList(java.util.ArrayList) ECKey(org.bitcoinj.core.ECKey) SpannableString(android.text.SpannableString) UnspentOutputWithKey(com.samourai.whirlpool.client.tx0.UnspentOutputWithKey) Tx0(com.samourai.whirlpool.client.tx0.Tx0) WhirlpoolTx0(com.samourai.wallet.whirlpool.WhirlpoolTx0) UnspentResponse(com.samourai.wallet.api.backend.beans.UnspentResponse) UTXOCoin(com.samourai.wallet.utxos.models.UTXOCoin) WhirlpoolWallet(com.samourai.whirlpool.client.wallet.WhirlpoolWallet) Tx0Config(com.samourai.whirlpool.client.tx0.Tx0Config)

Example 2 with UnspentOutputWithKey

use of com.samourai.whirlpool.client.tx0.UnspentOutputWithKey in project samourai-wallet-android by Samourai-Wallet.

the class WhirlpoolWalletTest method testTx0.

@Test
public void testTx0() throws Exception {
    Collection<UnspentOutputWithKey> spendFroms = new LinkedList<>();
    ECKey ecKey = bip84w.getAccountAt(0).getChain(0).getAddressAt(61).getECKey();
    UnspentResponse.UnspentOutput unspentOutput = newUnspentOutput("cc588cdcb368f894a41c372d1f905770b61ecb3fb8e5e01a97e7cedbf5e324ae", 1, 500000000);
    unspentOutput.addr = new SegwitAddress(ecKey, networkParameters).getBech32AsString();
    spendFroms.add(new UnspentOutputWithKey(unspentOutput, ecKey.getPrivKeyBytes()));
    Pool pool = whirlpoolWallet.findPoolById("0.01btc");
    Tx0Config tx0Config = whirlpoolWallet.getTx0Config().setMaxOutputs(1);
    Tx0Preview tx0Preview = whirlpoolWallet.tx0Preview(pool, spendFroms, tx0Config, Tx0FeeTarget.BLOCKS_2);
    Tx0 tx0 = whirlpoolWallet.tx0(pool, spendFroms, tx0Config, Tx0FeeTarget.BLOCKS_2);
    Assert.assertEquals("dc398c99cf9ce18123ea916d69bb99da44a3979a625eeaac5e17837f879a8874", tx0.getTx().getHashAsString());
    Assert.assertEquals("01000000000101ae24e3f5dbcee7971ae0e5b83fcb1eb67057901f2d371ca494f868b3dc8c58cc0100000000ffffffff040000000000000000426a408a9eb379a44ff4d4579118c64b64bbd327cd95ba826ac68f334155fd9ca4e3acd64acdfd75dd7c3cc5bc34d31af6c6e68b4db37eac62b574890f6cfc7b904d9950c300000000000016001441021632871b0f1cf61a7ac7b6a0187e88628291b44b0f00000000001600147e4a4628dd8fbd638681a728e39f7d92ada04070e954bd1d00000000160014df3a4bc83635917ad18621f3ba78cef6469c5f5902483045022100c48f02762ab9877533b5c7b0bc729479ce7809596b89cb9f62b740ea3350068f02205ef46ca67df39d35f940e33223c5ddd56669d953b6ef4948e355c1f3430f32e10121032e46baef8bcde0c3a19cadb378197fa31d69adb21535de3f84de699a1cf88b4500000000", new String(Hex.encode(tx0.getTx().bitcoinSerialize())));
}
Also used : SegwitAddress(com.samourai.wallet.segwit.SegwitAddress) ECKey(org.bitcoinj.core.ECKey) Pool(com.samourai.whirlpool.client.whirlpool.beans.Pool) Tx0Preview(com.samourai.whirlpool.client.tx0.Tx0Preview) UnspentOutputWithKey(com.samourai.whirlpool.client.tx0.UnspentOutputWithKey) Tx0(com.samourai.whirlpool.client.tx0.Tx0) LinkedList(java.util.LinkedList) UnspentResponse(com.samourai.wallet.api.backend.beans.UnspentResponse) Tx0Config(com.samourai.whirlpool.client.tx0.Tx0Config) Test(org.junit.Test)

Aggregations

UnspentResponse (com.samourai.wallet.api.backend.beans.UnspentResponse)2 Tx0 (com.samourai.whirlpool.client.tx0.Tx0)2 Tx0Config (com.samourai.whirlpool.client.tx0.Tx0Config)2 UnspentOutputWithKey (com.samourai.whirlpool.client.tx0.UnspentOutputWithKey)2 ECKey (org.bitcoinj.core.ECKey)2 SpannableString (android.text.SpannableString)1 SegwitAddress (com.samourai.wallet.segwit.SegwitAddress)1 UTXOCoin (com.samourai.wallet.utxos.models.UTXOCoin)1 WhirlpoolTx0 (com.samourai.wallet.whirlpool.WhirlpoolTx0)1 Tx0Preview (com.samourai.whirlpool.client.tx0.Tx0Preview)1 WhirlpoolWallet (com.samourai.whirlpool.client.wallet.WhirlpoolWallet)1 Pool (com.samourai.whirlpool.client.whirlpool.beans.Pool)1 ArrayList (java.util.ArrayList)1 LinkedList (java.util.LinkedList)1 Test (org.junit.Test)1