From 2ed2cc0fab309e55971aaf38fd4d9eefb09980ef Mon Sep 17 00:00:00 2001 From: catbref Date: Wed, 8 Apr 2020 10:09:52 +0100 Subject: [PATCH] Correct package names and minor clean --- .../org/qortal/at/QortalFunctionCode.java | 1 - src/main/java/org/qortal/crosschain/BTC.java | 2 +- .../{qora => qortal}/crosschain/BTCACCT.java | 6 +- .../java/org/qora/test/btcacct/Initiate.java | 144 ------------ .../java/org/qora/test/btcacct/Respond2.java | 209 ------------------ .../test/apps/BuildCheckpoints.java | 2 +- .../test/btcacct/BuildP2SH.java | 20 +- .../test/btcacct/CheckP2SH.java | 20 +- .../test/btcacct/DeployAT.java | 44 ++-- .../test/btcacct/GetTransaction.java | 10 +- .../{qora => qortal}/test/btcacct/Redeem.java | 20 +- .../{qora => qortal}/test/btcacct/Refund.java | 38 +--- 12 files changed, 72 insertions(+), 444 deletions(-) rename src/main/java/org/{qora => qortal}/crosschain/BTCACCT.java (99%) delete mode 100644 src/test/java/org/qora/test/btcacct/Initiate.java delete mode 100644 src/test/java/org/qora/test/btcacct/Respond2.java rename src/test/java/org/{qora => qortal}/test/apps/BuildCheckpoints.java (98%) rename src/test/java/org/{qora => qortal}/test/btcacct/BuildP2SH.java (91%) rename src/test/java/org/{qora => qortal}/test/btcacct/CheckP2SH.java (94%) rename src/test/java/org/{qora => qortal}/test/btcacct/DeployAT.java (84%) rename src/test/java/org/{qora => qortal}/test/btcacct/GetTransaction.java (82%) rename src/test/java/org/{qora => qortal}/test/btcacct/Redeem.java (94%) rename src/test/java/org/{qora => qortal}/test/btcacct/Refund.java (88%) diff --git a/src/main/java/org/qortal/at/QortalFunctionCode.java b/src/main/java/org/qortal/at/QortalFunctionCode.java index e0d6cfe2..0ca9f5d6 100644 --- a/src/main/java/org/qortal/at/QortalFunctionCode.java +++ b/src/main/java/org/qortal/at/QortalFunctionCode.java @@ -8,7 +8,6 @@ import org.ciyam.at.ExecutionException; import org.ciyam.at.FunctionData; import org.ciyam.at.IllegalFunctionCodeException; import org.ciyam.at.MachineState; -import org.ciyam.at.Timestamp; import org.qortal.crosschain.BTC; import org.qortal.crypto.Crypto; import org.qortal.settings.Settings; diff --git a/src/main/java/org/qortal/crosschain/BTC.java b/src/main/java/org/qortal/crosschain/BTC.java index 43001c6a..f7f9a979 100644 --- a/src/main/java/org/qortal/crosschain/BTC.java +++ b/src/main/java/org/qortal/crosschain/BTC.java @@ -503,7 +503,7 @@ public class BTC { }; ReplayHooks replayHooks = new ReplayHooks(() -> this.peerGroup.addBlocksDownloadedEventListener(listener), () -> this.peerGroup.removeBlocksDownloadedEventListener(listener)); - + // Replay chain in the hope it will download transactionId as a dependency try { replayChain(startTime, wallet, replayHooks); diff --git a/src/main/java/org/qora/crosschain/BTCACCT.java b/src/main/java/org/qortal/crosschain/BTCACCT.java similarity index 99% rename from src/main/java/org/qora/crosschain/BTCACCT.java rename to src/main/java/org/qortal/crosschain/BTCACCT.java index 2671d76f..a0480317 100644 --- a/src/main/java/org/qora/crosschain/BTCACCT.java +++ b/src/main/java/org/qortal/crosschain/BTCACCT.java @@ -1,4 +1,4 @@ -package org.qora.crosschain; +package org.qortal.crosschain; import java.math.BigDecimal; import java.nio.ByteBuffer; @@ -19,7 +19,7 @@ import org.bitcoinj.script.ScriptOpCodes; import org.ciyam.at.FunctionCode; import org.ciyam.at.MachineState; import org.ciyam.at.OpCode; -import org.qora.utils.BitTwiddling; +import org.qortal.utils.BitTwiddling; import com.google.common.hash.HashCode; import com.google.common.primitives.Bytes; @@ -214,7 +214,7 @@ public class BTCACCT { // Temp buffer for hashing any passed secret dataByteBuffer.putLong(addrHashTemp1); dataByteBuffer.putLong(32L); - + // Initial payout amount dataByteBuffer.putLong(initialPayout.unscaledValue().longValue()); diff --git a/src/test/java/org/qora/test/btcacct/Initiate.java b/src/test/java/org/qora/test/btcacct/Initiate.java deleted file mode 100644 index e5f185f4..00000000 --- a/src/test/java/org/qora/test/btcacct/Initiate.java +++ /dev/null @@ -1,144 +0,0 @@ -package org.qora.test.btcacct; - -import java.security.Security; -import java.time.Instant; -import java.time.LocalDateTime; -import java.time.ZoneOffset; - -import org.bitcoinj.core.Address; -import org.bitcoinj.core.AddressFormatException; -import org.bitcoinj.core.Coin; -import org.bitcoinj.core.ECKey; -import org.bitcoinj.core.LegacyAddress; -import org.bitcoinj.core.NetworkParameters; -import org.bitcoinj.params.RegTestParams; -import org.bitcoinj.params.TestNet3Params; -import org.bitcoinj.script.Script.ScriptType; -import org.bouncycastle.jce.provider.BouncyCastleProvider; -import org.qora.controller.Controller; -import org.qora.crosschain.BTC; -import org.qora.crosschain.BTCACCT; -import org.qora.repository.DataException; -import org.qora.repository.Repository; -import org.qora.repository.RepositoryFactory; -import org.qora.repository.RepositoryManager; -import org.qora.repository.hsqldb.HSQLDBRepositoryFactory; -import org.qora.settings.Settings; - -import com.google.common.hash.HashCode; - -/** - * Initiator must be Qora-chain so that initiator can send initial message to BTC P2SH then Qora can scan for P2SH add send corresponding message to Qora AT. - * - * Initiator (wants Qora, has BTC) - * Funds BTC P2SH address - * - * Responder (has Qora, wants BTC) - * Builds Qora ACCT AT and funds it with Qora - * - * Initiator sends recipient+secret+script as input to BTC P2SH address, releasing BTC amount - fees to responder - * - * Qora nodes scan for P2SH output, checks amount and recipient and if ok sends secret to Qora ACCT AT - * (Or it's possible to feed BTC transaction details into Qora AT so it can check them itself?) - * - * Qora ACCT AT sends its Qora to initiator - * - */ - -public class Initiate { - - private static final long REFUND_TIMEOUT = 600L; // seconds - - private static void usage(String error) { - if (error != null) - System.err.println(error); - - System.err.println(String.format("usage: Initiate ()")); - System.err.println(String.format("example: Initiate mrTDPdM15cFWJC4g223BXX5snicfVJBx6M \\\n" - + "\t0.00008642 \\\n" - + "\tn2N5VKrzq39nmuefZwp3wBiF4icdXX2B6o")); - System.exit(1); - } - - public static void main(String[] args) { - if (args.length < 3 || args.length > 4) - usage(null); - - Security.insertProviderAt(new BouncyCastleProvider(), 0); - Settings.fileInstance("settings-test.json"); - NetworkParameters params = RegTestParams.get(); - // TestNet3Params.get(); - - Address yourBitcoinAddress = null; - Coin bitcoinAmount = null; - Address theirBitcoinAddress = null; - Coin bitcoinFee = BTCACCT.DEFAULT_BTC_FEE; - - try { - int argIndex = 0; - - yourBitcoinAddress = Address.fromString(params, args[argIndex++]); - if (yourBitcoinAddress.getOutputScriptType() != ScriptType.P2PKH) - usage("Your BTC address is not in P2PKH form"); - - bitcoinAmount = Coin.parseCoin(args[argIndex++]); - - theirBitcoinAddress = Address.fromString(params, args[argIndex++]); - if (theirBitcoinAddress.getOutputScriptType() != ScriptType.P2PKH) - usage("Their BTC address is not in P2PKH form"); - - if (args.length > argIndex) - bitcoinFee = Coin.parseCoin(args[argIndex++]); - } catch (NumberFormatException | AddressFormatException e) { - usage(String.format("Argument format exception: %s", e.getMessage())); - } - - try { - RepositoryFactory repositoryFactory = new HSQLDBRepositoryFactory(Controller.getRepositoryUrl()); - RepositoryManager.setRepositoryFactory(repositoryFactory); - } catch (DataException e) { - throw new RuntimeException("Repository startup issue: " + e.getMessage()); - } - - try (final Repository repository = RepositoryManager.getRepository()) { - System.out.println("Confirm the following is correct based on the info you've given:"); - - System.out.println(String.format("Your Bitcoin address: %s", yourBitcoinAddress)); - System.out.println(String.format("Their Bitcoin address: %s", theirBitcoinAddress)); - System.out.println(String.format("Bitcoin redeem amount: %s", bitcoinAmount.toPlainString())); - System.out.println(String.format("Bitcoin redeem fee: %s", bitcoinFee.toPlainString())); - - // New/derived info - - ECKey tradeKey = new ECKey(); - System.out.println("\nSecret info (DO NOT share with other party):"); - System.out.println(String.format("Trade private key: %s", HashCode.fromBytes(tradeKey.getPrivKeyBytes()))); - - System.out.println("\nGive this info to other party:"); - - System.out.println(String.format("Trade pubkeyhash: %s", HashCode.fromBytes(tradeKey.getPubKeyHash()))); - - int lockTime = (int) ((System.currentTimeMillis() / 1000L) + REFUND_TIMEOUT); - System.out.println(String.format("Redeem script lockTime: %s (%d)", LocalDateTime.ofInstant(Instant.ofEpochSecond(lockTime), ZoneOffset.UTC), lockTime)); - - byte[] redeemScriptBytes = null; // BTCACCT.buildScript(tradeKey.getPubKeyHash(), yourBitcoinAddress.getHash(), theirBitcoinAddress.getHash(), lockTime); - System.out.println(String.format("Redeem script: %s", HashCode.fromBytes(redeemScriptBytes))); - - byte[] redeemScriptHash = BTC.hash160(redeemScriptBytes); - - Address p2shAddress = LegacyAddress.fromScriptHash(params, redeemScriptHash); - System.out.println(String.format("P2SH address: %s", p2shAddress)); - - bitcoinAmount = bitcoinAmount.add(bitcoinFee); - - // Fund P2SH - System.out.println(String.format("\nYou need to fund %s with %s BTC (includes redeem/refund fee of %s)", - p2shAddress.toString(), bitcoinAmount.toPlainString(), bitcoinFee.toPlainString())); - - System.out.println("Once this is done, responder should run Respond to check P2SH funding and create AT"); - } catch (DataException e) { - throw new RuntimeException("Repository issue: " + e.getMessage()); - } - } - -} diff --git a/src/test/java/org/qora/test/btcacct/Respond2.java b/src/test/java/org/qora/test/btcacct/Respond2.java deleted file mode 100644 index f7f5ccbc..00000000 --- a/src/test/java/org/qora/test/btcacct/Respond2.java +++ /dev/null @@ -1,209 +0,0 @@ -package org.qora.test.btcacct; - -import java.math.BigDecimal; -import java.security.Security; -import java.time.Instant; -import java.time.LocalDateTime; -import java.time.ZoneId; - -import org.bitcoinj.core.Address; -import org.bitcoinj.core.Coin; -import org.bitcoinj.core.ECKey; -import org.bitcoinj.core.LegacyAddress; -import org.bitcoinj.core.NetworkParameters; -import org.bitcoinj.params.TestNet3Params; -import org.bitcoinj.script.Script.ScriptType; -import org.bouncycastle.jce.provider.BouncyCastleProvider; -import org.qora.account.PrivateKeyAccount; -import org.qora.account.PublicKeyAccount; -import org.qora.asset.Asset; -import org.qora.controller.Controller; -import org.qora.crosschain.BTC; -import org.qora.crosschain.BTCACCT; -import org.qora.data.transaction.BaseTransactionData; -import org.qora.data.transaction.DeployAtTransactionData; -import org.qora.data.transaction.TransactionData; -import org.qora.group.Group; -import org.qora.repository.DataException; -import org.qora.repository.Repository; -import org.qora.repository.RepositoryFactory; -import org.qora.repository.RepositoryManager; -import org.qora.repository.hsqldb.HSQLDBRepositoryFactory; -import org.qora.settings.Settings; -import org.qora.transaction.DeployAtTransaction; -import org.qora.transaction.Transaction; -import org.qora.transform.TransformationException; -import org.qora.transform.transaction.TransactionTransformer; -import org.qora.utils.Base58; - -import com.google.common.hash.HashCode; - -/** - * Initiator must be Qora-chain so that initiator can send initial message to BTC P2SH then Qora can scan for P2SH add send corresponding message to Qora AT. - * - * Initiator (wants Qora, has BTC) - * Funds BTC P2SH address - * - * Responder (has Qora, wants BTC) - * Builds Qora ACCT AT and funds it with Qora - * - * Initiator sends recipient+secret+script as input to BTC P2SH address, releasing BTC amount - fees to responder - * - * Qora nodes scan for P2SH output, checks amount and recipient and if ok sends secret to Qora ACCT AT - * (Or it's possible to feed BTC transaction details into Qora AT so it can check them itself?) - * - * Qora ACCT AT sends its Qora to initiator - * - */ - -public class Respond2 { - - private static final long REFUND_TIMEOUT = 600L; // seconds - - private static void usage() { - System.err.println(String.format("usage: Respond2 ")); - System.err.println(String.format("example: Respond2 3jjoToDaDpsdUHqaouLGypFeewNVKvtkmdM38i54WVra \\\n" - + "\t032783606be32a3e639a33afe2b15f058708ab124f3b290d595ee954390a0c8559 \\\n" - + "\t123 0.00008642 \\\n" - + "\t6rNn9b3pYRrG9UKqzMWYZ9qa8F3Zgv2mVWrULGHUusb \\\n" - + "\t03aa20871c2195361f2826c7a649eab6b42639630c4d8c33c55311d5c1e476b5d6 \\\n" - + "\tb837056cdc5d805e4db1f830a58158e1131ac96ea71de4c6f9d7854985e153e2 1575021641 2MvGdGUgAfc7qTHaZJwWmZ26Fg6Hjif8gNy")); - System.exit(1); - } - - public static void main(String[] args) { - if (args.length != 9) - usage(); - - Security.insertProviderAt(new BouncyCastleProvider(), 0); - - Settings.fileInstance("settings-test.json"); - - NetworkParameters params = TestNet3Params.get(); - - int argIndex = 0; - String yourQortPrivKey58 = args[argIndex++]; - String yourBitcoinPubKeyHex = args[argIndex++]; - - String rawQortAmount = args[argIndex++]; - String rawBitcoinAmount = args[argIndex++]; - - String theirQortPubKey58 = args[argIndex++]; - String theirBitcoinPubKeyHex = args[argIndex++]; - - String secretHashHex = args[argIndex++]; - String rawLockTime = args[argIndex++]; - String rawP2shAddress = args[argIndex++]; - - try { - RepositoryFactory repositoryFactory = new HSQLDBRepositoryFactory(Controller.getRepositoryUrl()); - RepositoryManager.setRepositoryFactory(repositoryFactory); - } catch (DataException e) { - throw new RuntimeException("Repository startup issue: " + e.getMessage()); - } - - try (final Repository repository = RepositoryManager.getRepository()) { - System.out.println("Confirm the following is correct based on the info you've given:"); - - byte[] yourQortPrivKey = Base58.decode(yourQortPrivKey58); - PrivateKeyAccount yourQortalAccount = new PrivateKeyAccount(repository, yourQortPrivKey); - byte[] yourQortPubKey = yourQortalAccount.getPublicKey(); - System.out.println(String.format("Your Qortal address: %s", yourQortalAccount.getAddress())); - - byte[] yourBitcoinPubKey = HashCode.fromString(yourBitcoinPubKeyHex).asBytes(); - ECKey yourBitcoinKey = ECKey.fromPublicOnly(yourBitcoinPubKey); - Address yourBitcoinAddress = Address.fromKey(params, yourBitcoinKey, ScriptType.P2PKH); - System.out.println(String.format("Your Bitcoin address: %s", yourBitcoinAddress)); - - byte[] theirQortPubKey = Base58.decode(theirQortPubKey58); - PublicKeyAccount theirQortalAccount = new PublicKeyAccount(repository, theirQortPubKey); - System.out.println(String.format("Their Qortal address: %s", theirQortalAccount.getAddress())); - - byte[] theirBitcoinPubKey = HashCode.fromString(theirBitcoinPubKeyHex).asBytes(); - ECKey theirBitcoinKey = ECKey.fromPublicOnly(theirBitcoinPubKey); - Address theirBitcoinAddress = Address.fromKey(params, theirBitcoinKey, ScriptType.P2PKH); - System.out.println(String.format("Their Bitcoin address: %s", theirBitcoinAddress)); - - System.out.println("Hash of secret: " + secretHashHex); - - // New/derived info - - System.out.println("\nCHECKING info from other party:"); - - int lockTime = Integer.valueOf(rawLockTime); - System.out.println(String.format("Redeem script lockTime: %s (%d)", LocalDateTime.ofInstant(Instant.ofEpochSecond(lockTime), ZoneId.systemDefault()), lockTime)); - - byte[] secretHash = HashCode.fromString(secretHashHex).asBytes(); - System.out.println("Hash of secret: " + HashCode.fromBytes(secretHash).toString()); - - byte[] redeemScriptBytes = null; // BTCACCT.buildScript(secretHash, theirBitcoinPubKey, yourBitcoinPubKey, lockTime); - System.out.println("Redeem script: " + HashCode.fromBytes(redeemScriptBytes).toString()); - - byte[] redeemScriptHash = BTC.hash160(redeemScriptBytes); - - Address p2shAddress = LegacyAddress.fromScriptHash(params, redeemScriptHash); - System.out.println(String.format("P2SH address: %s", p2shAddress)); - - if (!p2shAddress.toString().equals(rawP2shAddress)) { - System.err.println(String.format("Derived P2SH address %s does not match given address %s", p2shAddress, rawP2shAddress)); - System.exit(2); - } - - // Check for funded P2SH - Coin bitcoinAmount = Coin.parseCoin(rawBitcoinAmount).add(BTCACCT.DEFAULT_BTC_FEE); - - Coin p2shBalance = BTC.getInstance().getBalance(p2shAddress.toString(), lockTime - REFUND_TIMEOUT); - if (p2shBalance == null) { - System.err.println(String.format("Unable to check P2SH address %s balance", p2shAddress)); - System.exit(2); - } - if (p2shBalance.isLessThan(bitcoinAmount)) { - System.err.println(String.format("P2SH address %s has lower balance than expected %s BTC", p2shAddress, p2shBalance.toPlainString())); - System.exit(2); - } - System.out.println(String.format("P2SH address %s balance: %s BTC", p2shAddress, p2shBalance.toPlainString())); - - System.out.println("\nYour response:"); - - // If good, deploy AT - byte[] creationBytes = null; // BTCACCT.buildQortalAT(secretHash, theirQortPubKey, REFUND_TIMEOUT / 60); - System.out.println("CIYAM AT creation bytes: " + HashCode.fromBytes(creationBytes).toString()); - - BigDecimal qortAmount = new BigDecimal(rawQortAmount).setScale(8); - - long txTimestamp = System.currentTimeMillis(); - byte[] lastReference = yourQortalAccount.getLastReference(); - - if (lastReference == null) { - System.err.println(String.format("Qortal account %s has no last reference", yourQortalAccount.getAddress())); - System.exit(2); - } - - BigDecimal fee = BigDecimal.ZERO; - BaseTransactionData baseTransactionData = new BaseTransactionData(txTimestamp, Group.NO_GROUP, lastReference, yourQortPubKey, fee, null); - TransactionData deployAtTransactionData = new DeployAtTransactionData(baseTransactionData, "QORT-BTC", "QORT-BTC ACCT", "", "", creationBytes, qortAmount, Asset.QORT); - - Transaction deployAtTransaction = new DeployAtTransaction(repository, deployAtTransactionData); - - fee = deployAtTransaction.calcRecommendedFee(); - deployAtTransactionData.setFee(fee); - - deployAtTransaction.sign(yourQortalAccount); - - byte[] signedBytes = null; - try { - signedBytes = TransactionTransformer.toBytes(deployAtTransactionData); - } catch (TransformationException e) { - System.err.println(String.format("Unable to convert transaction to base58: %s", e.getMessage())); - System.exit(2); - } - - System.out.println(String.format("\nSigned transaction in base58, ready for POST /transactions/process:\n%s\n", Base58.encode(signedBytes))); - } catch (NumberFormatException e) { - usage(); - } catch (DataException e) { - throw new RuntimeException("Repository issue: " + e.getMessage()); - } - } - -} diff --git a/src/test/java/org/qora/test/apps/BuildCheckpoints.java b/src/test/java/org/qortal/test/apps/BuildCheckpoints.java similarity index 98% rename from src/test/java/org/qora/test/apps/BuildCheckpoints.java rename to src/test/java/org/qortal/test/apps/BuildCheckpoints.java index 5b7f2d44..48cc570c 100644 --- a/src/test/java/org/qora/test/apps/BuildCheckpoints.java +++ b/src/test/java/org/qortal/test/apps/BuildCheckpoints.java @@ -1,4 +1,4 @@ -package org.qora.test.apps; +package org.qortal.test.apps; import java.io.File; import java.io.FileNotFoundException; diff --git a/src/test/java/org/qora/test/btcacct/BuildP2SH.java b/src/test/java/org/qortal/test/btcacct/BuildP2SH.java similarity index 91% rename from src/test/java/org/qora/test/btcacct/BuildP2SH.java rename to src/test/java/org/qortal/test/btcacct/BuildP2SH.java index fd2b9bf4..23c7ab7c 100644 --- a/src/test/java/org/qora/test/btcacct/BuildP2SH.java +++ b/src/test/java/org/qortal/test/btcacct/BuildP2SH.java @@ -1,4 +1,4 @@ -package org.qora.test.btcacct; +package org.qortal.test.btcacct; import java.security.Security; import java.time.Instant; @@ -11,15 +11,15 @@ import org.bitcoinj.core.LegacyAddress; import org.bitcoinj.core.NetworkParameters; import org.bitcoinj.script.Script.ScriptType; import org.bouncycastle.jce.provider.BouncyCastleProvider; -import org.qora.controller.Controller; -import org.qora.crosschain.BTC; -import org.qora.crosschain.BTCACCT; -import org.qora.repository.DataException; -import org.qora.repository.Repository; -import org.qora.repository.RepositoryFactory; -import org.qora.repository.RepositoryManager; -import org.qora.repository.hsqldb.HSQLDBRepositoryFactory; -import org.qora.settings.Settings; +import org.qortal.controller.Controller; +import org.qortal.crosschain.BTC; +import org.qortal.crosschain.BTCACCT; +import org.qortal.repository.DataException; +import org.qortal.repository.Repository; +import org.qortal.repository.RepositoryFactory; +import org.qortal.repository.RepositoryManager; +import org.qortal.repository.hsqldb.HSQLDBRepositoryFactory; +import org.qortal.settings.Settings; import com.google.common.hash.HashCode; diff --git a/src/test/java/org/qora/test/btcacct/CheckP2SH.java b/src/test/java/org/qortal/test/btcacct/CheckP2SH.java similarity index 94% rename from src/test/java/org/qora/test/btcacct/CheckP2SH.java rename to src/test/java/org/qortal/test/btcacct/CheckP2SH.java index ac090e69..befa1963 100644 --- a/src/test/java/org/qora/test/btcacct/CheckP2SH.java +++ b/src/test/java/org/qortal/test/btcacct/CheckP2SH.java @@ -1,4 +1,4 @@ -package org.qora.test.btcacct; +package org.qortal.test.btcacct; import java.security.Security; import java.time.Instant; @@ -13,15 +13,15 @@ import org.bitcoinj.core.NetworkParameters; import org.bitcoinj.core.TransactionOutput; import org.bitcoinj.script.Script.ScriptType; import org.bouncycastle.jce.provider.BouncyCastleProvider; -import org.qora.controller.Controller; -import org.qora.crosschain.BTC; -import org.qora.crosschain.BTCACCT; -import org.qora.repository.DataException; -import org.qora.repository.Repository; -import org.qora.repository.RepositoryFactory; -import org.qora.repository.RepositoryManager; -import org.qora.repository.hsqldb.HSQLDBRepositoryFactory; -import org.qora.settings.Settings; +import org.qortal.controller.Controller; +import org.qortal.crosschain.BTC; +import org.qortal.crosschain.BTCACCT; +import org.qortal.repository.DataException; +import org.qortal.repository.Repository; +import org.qortal.repository.RepositoryFactory; +import org.qortal.repository.RepositoryManager; +import org.qortal.repository.hsqldb.HSQLDBRepositoryFactory; +import org.qortal.settings.Settings; import com.google.common.hash.HashCode; diff --git a/src/test/java/org/qora/test/btcacct/DeployAT.java b/src/test/java/org/qortal/test/btcacct/DeployAT.java similarity index 84% rename from src/test/java/org/qora/test/btcacct/DeployAT.java rename to src/test/java/org/qortal/test/btcacct/DeployAT.java index da05c567..36dbdc5a 100644 --- a/src/test/java/org/qora/test/btcacct/DeployAT.java +++ b/src/test/java/org/qortal/test/btcacct/DeployAT.java @@ -1,4 +1,4 @@ -package org.qora.test.btcacct; +package org.qortal.test.btcacct; import java.math.BigDecimal; import java.security.Security; @@ -7,26 +7,26 @@ import java.time.LocalDateTime; import java.time.ZoneId; import org.bouncycastle.jce.provider.BouncyCastleProvider; -import org.qora.account.PrivateKeyAccount; -import org.qora.asset.Asset; -import org.qora.controller.Controller; -import org.qora.crosschain.BTCACCT; -import org.qora.crypto.Crypto; -import org.qora.data.transaction.BaseTransactionData; -import org.qora.data.transaction.DeployAtTransactionData; -import org.qora.data.transaction.TransactionData; -import org.qora.group.Group; -import org.qora.repository.DataException; -import org.qora.repository.Repository; -import org.qora.repository.RepositoryFactory; -import org.qora.repository.RepositoryManager; -import org.qora.repository.hsqldb.HSQLDBRepositoryFactory; -import org.qora.settings.Settings; -import org.qora.transaction.DeployAtTransaction; -import org.qora.transaction.Transaction; -import org.qora.transform.TransformationException; -import org.qora.transform.transaction.TransactionTransformer; -import org.qora.utils.Base58; +import org.qortal.account.PrivateKeyAccount; +import org.qortal.asset.Asset; +import org.qortal.controller.Controller; +import org.qortal.crosschain.BTCACCT; +import org.qortal.crypto.Crypto; +import org.qortal.data.transaction.BaseTransactionData; +import org.qortal.data.transaction.DeployAtTransactionData; +import org.qortal.data.transaction.TransactionData; +import org.qortal.group.Group; +import org.qortal.repository.DataException; +import org.qortal.repository.Repository; +import org.qortal.repository.RepositoryFactory; +import org.qortal.repository.RepositoryManager; +import org.qortal.repository.hsqldb.HSQLDBRepositoryFactory; +import org.qortal.settings.Settings; +import org.qortal.transaction.DeployAtTransaction; +import org.qortal.transaction.Transaction; +import org.qortal.transform.TransformationException; +import org.qortal.transform.transaction.TransactionTransformer; +import org.qortal.utils.Base58; import com.google.common.hash.HashCode; @@ -115,7 +115,7 @@ public class DeployAT { // Deploy AT final int BLOCK_TIME = 60; // seconds - final int refundTimeout = (lockTime - (int) (System.currentTimeMillis() / 1000L)) / BLOCK_TIME; + final int refundTimeout = (lockTime - (int) (System.currentTimeMillis() / 1000L)) / BLOCK_TIME; byte[] creationBytes = BTCACCT.buildQortalAT(secretHash, redeemAddress, refundTimeout, initialPayout); System.out.println("CIYAM AT creation bytes: " + HashCode.fromBytes(creationBytes).toString()); diff --git a/src/test/java/org/qora/test/btcacct/GetTransaction.java b/src/test/java/org/qortal/test/btcacct/GetTransaction.java similarity index 82% rename from src/test/java/org/qora/test/btcacct/GetTransaction.java rename to src/test/java/org/qortal/test/btcacct/GetTransaction.java index 9686a3f2..c97762b9 100644 --- a/src/test/java/org/qora/test/btcacct/GetTransaction.java +++ b/src/test/java/org/qortal/test/btcacct/GetTransaction.java @@ -1,4 +1,4 @@ -package org.qora.test.btcacct; +package org.qortal.test.btcacct; import java.security.Security; import java.util.List; @@ -6,8 +6,8 @@ import java.util.List; import org.bitcoinj.core.AddressFormatException; import org.bitcoinj.core.TransactionOutput; import org.bouncycastle.jce.provider.BouncyCastleProvider; -import org.qora.crosschain.BTC; -import org.qora.settings.Settings; +import org.qortal.crosschain.BTC; +import org.qortal.settings.Settings; import com.google.common.hash.HashCode; @@ -23,8 +23,8 @@ public class GetTransaction { System.err.println(error); System.err.println(String.format("usage: GetTransaction ")); - System.err.println(String.format("example: GetTransaction 816407e79568f165f13e09e9912c5f2243e0a23a007cec425acedc2e89284660 (mainnet)")); - System.err.println(String.format("example: GetTransaction 3bfd17a492a4e3d6cb7204e17e20aca6c1ab82e1828bd1106eefbaf086fb8a4e (testnet)")); + System.err.println(String.format("example (mainnet): GetTransaction 816407e79568f165f13e09e9912c5f2243e0a23a007cec425acedc2e89284660")); + System.err.println(String.format("example (testnet): GetTransaction 3bfd17a492a4e3d6cb7204e17e20aca6c1ab82e1828bd1106eefbaf086fb8a4e")); System.exit(1); } diff --git a/src/test/java/org/qora/test/btcacct/Redeem.java b/src/test/java/org/qortal/test/btcacct/Redeem.java similarity index 94% rename from src/test/java/org/qora/test/btcacct/Redeem.java rename to src/test/java/org/qortal/test/btcacct/Redeem.java index fd2a1061..a4907813 100644 --- a/src/test/java/org/qora/test/btcacct/Redeem.java +++ b/src/test/java/org/qortal/test/btcacct/Redeem.java @@ -1,4 +1,4 @@ -package org.qora.test.btcacct; +package org.qortal.test.btcacct; import java.security.Security; import java.time.Instant; @@ -16,15 +16,15 @@ import org.bitcoinj.core.Transaction; import org.bitcoinj.core.TransactionOutput; import org.bitcoinj.script.Script.ScriptType; import org.bouncycastle.jce.provider.BouncyCastleProvider; -import org.qora.controller.Controller; -import org.qora.crosschain.BTC; -import org.qora.crosschain.BTCACCT; -import org.qora.repository.DataException; -import org.qora.repository.Repository; -import org.qora.repository.RepositoryFactory; -import org.qora.repository.RepositoryManager; -import org.qora.repository.hsqldb.HSQLDBRepositoryFactory; -import org.qora.settings.Settings; +import org.qortal.controller.Controller; +import org.qortal.crosschain.BTC; +import org.qortal.crosschain.BTCACCT; +import org.qortal.repository.DataException; +import org.qortal.repository.Repository; +import org.qortal.repository.RepositoryFactory; +import org.qortal.repository.RepositoryManager; +import org.qortal.repository.hsqldb.HSQLDBRepositoryFactory; +import org.qortal.settings.Settings; import com.google.common.hash.HashCode; diff --git a/src/test/java/org/qora/test/btcacct/Refund.java b/src/test/java/org/qortal/test/btcacct/Refund.java similarity index 88% rename from src/test/java/org/qora/test/btcacct/Refund.java rename to src/test/java/org/qortal/test/btcacct/Refund.java index 3969c590..f22a436a 100644 --- a/src/test/java/org/qora/test/btcacct/Refund.java +++ b/src/test/java/org/qortal/test/btcacct/Refund.java @@ -1,4 +1,4 @@ -package org.qora.test.btcacct; +package org.qortal.test.btcacct; import java.security.Security; import java.time.Instant; @@ -16,36 +16,18 @@ import org.bitcoinj.core.Transaction; import org.bitcoinj.core.TransactionOutput; import org.bitcoinj.script.Script.ScriptType; import org.bouncycastle.jce.provider.BouncyCastleProvider; -import org.qora.controller.Controller; -import org.qora.crosschain.BTC; -import org.qora.crosschain.BTCACCT; -import org.qora.repository.DataException; -import org.qora.repository.Repository; -import org.qora.repository.RepositoryFactory; -import org.qora.repository.RepositoryManager; -import org.qora.repository.hsqldb.HSQLDBRepositoryFactory; -import org.qora.settings.Settings; +import org.qortal.controller.Controller; +import org.qortal.crosschain.BTC; +import org.qortal.crosschain.BTCACCT; +import org.qortal.repository.DataException; +import org.qortal.repository.Repository; +import org.qortal.repository.RepositoryFactory; +import org.qortal.repository.RepositoryManager; +import org.qortal.repository.hsqldb.HSQLDBRepositoryFactory; +import org.qortal.settings.Settings; import com.google.common.hash.HashCode; -/** - * Initiator must be Qora-chain so that initiator can send initial message to BTC P2SH then Qora can scan for P2SH add send corresponding message to Qora AT. - * - * Initiator (wants Qora, has BTC) - * Funds BTC P2SH address - * - * Responder (has Qora, wants BTC) - * Builds Qora ACCT AT and funds it with Qora - * - * Initiator sends recipient+secret+script as input to BTC P2SH address, releasing BTC amount - fees to responder - * - * Qora nodes scan for P2SH output, checks amount and recipient and if ok sends secret to Qora ACCT AT - * (Or it's possible to feed BTC transaction details into Qora AT so it can check them itself?) - * - * Qora ACCT AT sends its Qora to initiator - * - */ - public class Refund { static {