forked from Qortal/qortal
WIP: trade-bot: add flag to be set by AT if redeem happens so trade-bot detects redeem instead of refund
This commit is contained in:
parent
d2cae7c8b5
commit
7fd7104f46
@ -39,6 +39,7 @@ import org.qortal.transaction.MessageTransaction;
|
|||||||
import org.qortal.transaction.Transaction.ValidationResult;
|
import org.qortal.transaction.Transaction.ValidationResult;
|
||||||
import org.qortal.transform.TransformationException;
|
import org.qortal.transform.TransformationException;
|
||||||
import org.qortal.transform.transaction.DeployAtTransactionTransformer;
|
import org.qortal.transform.transaction.DeployAtTransactionTransformer;
|
||||||
|
import org.qortal.utils.Amounts;
|
||||||
import org.qortal.utils.NTP;
|
import org.qortal.utils.NTP;
|
||||||
|
|
||||||
public class TradeBot {
|
public class TradeBot {
|
||||||
@ -837,9 +838,15 @@ public class TradeBot {
|
|||||||
// Not finished yet
|
// Not finished yet
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// If AT's balance is zero, then it's auto-refunded so we're done
|
// If AT's balance should be zero
|
||||||
AccountBalanceData atBalanceData = repository.getAccountRepository().getBalance(tradeBotData.getAtAddress(), Asset.QORT);
|
AccountBalanceData atBalanceData = repository.getAccountRepository().getBalance(tradeBotData.getAtAddress(), Asset.QORT);
|
||||||
if (atBalanceData == null || atBalanceData.getBalance() == 0L) {
|
if (atBalanceData != null && atBalanceData.getBalance() > 0L) {
|
||||||
|
LOGGER.debug(() -> String.format("AT %s should have zero balance, not %s", tradeBotData.getAtAddress(), Amounts.prettyAmount(atBalanceData.getBalance())));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// We check variable in AT that is set when trade successfully completes
|
||||||
|
if (!crossChainTradeData.hasRedeemed) {
|
||||||
tradeBotData.setState(TradeBotData.State.BOB_REFUNDED);
|
tradeBotData.setState(TradeBotData.State.BOB_REFUNDED);
|
||||||
repository.getCrossChainRepository().save(tradeBotData);
|
repository.getCrossChainRepository().save(tradeBotData);
|
||||||
repository.saveChanges();
|
repository.saveChanges();
|
||||||
|
@ -92,7 +92,7 @@ public class BTCACCT {
|
|||||||
|
|
||||||
public static final int SECRET_LENGTH = 32;
|
public static final int SECRET_LENGTH = 32;
|
||||||
public static final int MIN_LOCKTIME = 1500000000;
|
public static final int MIN_LOCKTIME = 1500000000;
|
||||||
public static final byte[] CODE_BYTES_HASH = HashCode.fromString("58542b1d204d7034280fb85e8053c056353fcc9c3870c062a19b2fc17f764092").asBytes(); // SHA256 of AT code bytes
|
public static final byte[] CODE_BYTES_HASH = HashCode.fromString("f62e1447e8361703c261c8e8e1973713d29b713716582f491431cb7f6ee99e80").asBytes(); // SHA256 of AT code bytes
|
||||||
|
|
||||||
public static class OfferMessageData {
|
public static class OfferMessageData {
|
||||||
public byte[] recipientBitcoinPKH;
|
public byte[] recipientBitcoinPKH;
|
||||||
@ -201,6 +201,8 @@ public class BTCACCT {
|
|||||||
|
|
||||||
final int addrMode = addrCounter++;
|
final int addrMode = addrCounter++;
|
||||||
|
|
||||||
|
final int addrRedeemFlag = addrCounter++;
|
||||||
|
|
||||||
// Data segment
|
// Data segment
|
||||||
ByteBuffer dataByteBuffer = ByteBuffer.allocate(addrCounter * MachineState.VALUE_SIZE);
|
ByteBuffer dataByteBuffer = ByteBuffer.allocate(addrCounter * MachineState.VALUE_SIZE);
|
||||||
|
|
||||||
@ -500,6 +502,9 @@ public class BTCACCT {
|
|||||||
codeByteBuffer.put(OpCode.EXT_FUN_DAT.compile(FunctionCode.SET_B_IND, addrQortalRecipientPointer));
|
codeByteBuffer.put(OpCode.EXT_FUN_DAT.compile(FunctionCode.SET_B_IND, addrQortalRecipientPointer));
|
||||||
// Pay AT's balance to recipient
|
// Pay AT's balance to recipient
|
||||||
codeByteBuffer.put(OpCode.EXT_FUN_DAT.compile(FunctionCode.PAY_TO_ADDRESS_IN_B, addrQortAmount));
|
codeByteBuffer.put(OpCode.EXT_FUN_DAT.compile(FunctionCode.PAY_TO_ADDRESS_IN_B, addrQortAmount));
|
||||||
|
// Set redeem flag
|
||||||
|
codeByteBuffer.put(OpCode.INC_DAT.compile(addrRedeemFlag));
|
||||||
|
|
||||||
// Fall-through to refunding any remaining balance back to AT creator
|
// Fall-through to refunding any remaining balance back to AT creator
|
||||||
|
|
||||||
/* Refund balance back to AT creator */
|
/* Refund balance back to AT creator */
|
||||||
@ -686,6 +691,8 @@ public class BTCACCT {
|
|||||||
|
|
||||||
long mode = dataByteBuffer.getLong();
|
long mode = dataByteBuffer.getLong();
|
||||||
|
|
||||||
|
long redeemFlag = dataByteBuffer.getLong();
|
||||||
|
|
||||||
if (mode != 0) {
|
if (mode != 0) {
|
||||||
tradeData.mode = CrossChainTradeData.Mode.TRADE;
|
tradeData.mode = CrossChainTradeData.Mode.TRADE;
|
||||||
tradeData.refundTimeout = refundTimeout;
|
tradeData.refundTimeout = refundTimeout;
|
||||||
@ -695,6 +702,7 @@ public class BTCACCT {
|
|||||||
tradeData.recipientBitcoinPKH = recipientBitcoinPKH;
|
tradeData.recipientBitcoinPKH = recipientBitcoinPKH;
|
||||||
tradeData.lockTimeA = lockTimeA;
|
tradeData.lockTimeA = lockTimeA;
|
||||||
tradeData.lockTimeB = lockTimeB;
|
tradeData.lockTimeB = lockTimeB;
|
||||||
|
tradeData.hasRedeemed = redeemFlag != 0;
|
||||||
} else {
|
} else {
|
||||||
tradeData.mode = CrossChainTradeData.Mode.OFFER;
|
tradeData.mode = CrossChainTradeData.Mode.OFFER;
|
||||||
}
|
}
|
||||||
|
@ -79,6 +79,9 @@ public class CrossChainTradeData {
|
|||||||
@Schema(description = "Trade partner's Bitcoin public-key-hash (PKH)")
|
@Schema(description = "Trade partner's Bitcoin public-key-hash (PKH)")
|
||||||
public byte[] recipientBitcoinPKH;
|
public byte[] recipientBitcoinPKH;
|
||||||
|
|
||||||
|
@Schema(description = "Whether AT has paid out to trade partner")
|
||||||
|
public Boolean hasRedeemed;
|
||||||
|
|
||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
// Necessary for JAXB
|
// Necessary for JAXB
|
||||||
|
Loading…
x
Reference in New Issue
Block a user