Post
Topic
Board Announcements (Altcoins)
Re: [ANN] SpreadCoin | Decentralize Everything (decentralized blockexplorer coming)
by
coins101
on 29/09/2016, 23:15:11 UTC
No issues so far with using OP_Return as part of the proof process. BitSquare and a few others doing something similar already
Code:
// We add the hash ot OP_RETURN with a 0 amount output
        TransactionOutput contractHashOutput = new TransactionOutput(params, preparedDepositTx, Coin.ZERO,
                ScriptBuilder.createOpReturnScript(contractHash).getProgram());
        preparedDepositTx.addOutput(contractHashOutput);

        TransactionOutput takerTransactionOutput = null;
        if (takerChangeOutputValue > 0 && takerChangeAddressString != null)
            takerTransactionOutput = new TransactionOutput(params, preparedDepositTx, Coin.valueOf(takerChangeOutputValue),
                    new Address(params, takerChangeAddressString));

        if (offererIsBuyer) {
            // Add optional buyer outputs
            if (offererOutput != null)
                preparedDepositTx.addOutput(offererOutput);

            // Add optional seller outputs
            if (takerTransactionOutput != null)
                preparedDepositTx.addOutput(takerTransactionOutput);
        } else {
            // taker is buyer role

            // Add optional seller outputs
            if (takerTransactionOutput != null)
                preparedDepositTx.addOutput(takerTransactionOutput);

            // Add optional buyer outputs
            if (offererOutput != null)
                preparedDepositTx.addOutput(offererOutput);
        }

        // Sign inputs
        int start = offererIsBuyer ? 0 : takerRawTransactionInputs.size();
        int end = offererIsBuyer ? offererInputs.size() : preparedDepositTx.getInputs().size();
        for (int i = start; i < end; i++) {
            TransactionInput input = preparedDepositTx.getInput(i);
            signInput(preparedDepositTx, input, i);
            checkScriptSig(preparedDepositTx, input, i);
        }

        verifyTransaction(preparedDepositTx);

        printTxWithInputs("preparedDepositTx", preparedDepositTx);

        return new PreparedDepositTxAndOffererInputs(offererRawTransactionInputs, preparedDepositTx.bitcoinSerialize());
    }

Code:
// Check if OP_RETURN output with contract hash matches the one from the offerer
        TransactionOutput contractHashOutput = new TransactionOutput(params, offerersDepositTx, Coin.ZERO,
                ScriptBuilder.createOpReturnScript(contractHash).getProgram());
        log.debug("contractHashOutput " + contractHashOutput);
        TransactionOutput offerersContractHashOutput = offerersDepositTx.getOutputs().get(1);
        log.debug("offerersContractHashOutput " + offerersContractHashOutput);
        if (!offerersContractHashOutput.getScriptPubKey().equals(contractHashOutput.getScriptPubKey()))
            throw new TransactionVerificationException("Offerers transaction output for the contract hash is not matching takers version.");