Exemple #1
0
    def refund(self, wallet):
        '''
        Creates transaction that can refund a contract.

        Args:
            wallet (obj): wallet object of the Atomic Swap contract creator

        Returns:
            BitcoinTransaction: unsigned transaction object with refund transaction

        Raises:
            RuntimeError: if contract is still valid
            ValueError: if contract balance is 0
        '''
        if self.locktime > datetime.utcnow():
            locktime_string = self.locktime.strftime('%Y-%m-%d %H:%M:%S')
            raise RuntimeError(
                f"This contract is still valid! It can't be refunded until {locktime_string} UTC."
            )
        if self.balance == 0:
            raise ValueError("Balance of this contract is 0.")
        transaction = BitcoinTransaction(
            network=self.network,
            recipient_address=self.refund_address,
            value=self.value,
            solvable_utxo=[
                self.get_contract_utxo(wallet,
                                       refund=True,
                                       contract=self.contract)
            ],
            tx_locktime=self.locktime_timestamp,
        )
        transaction.create_unsigned_transaction()
        return transaction
Exemple #2
0
    def redeem(self, wallet, secret: str) -> BitcoinTransaction:
        '''
        Creates transaction that can redeem a contract.

        Args:
            wallet (obj): wallet object of the Atomic Swap contract recipient
            secret (str): transaction secret that should match the contract secret hash (after hashing)

        Returns:
            BitcoinTransaction: unsigned transaction object with redeem transaction

        Raises:
            ValueError: if contract balance is 0
        '''
        if self.balance == 0:
            raise ValueError("Balance of this contract is 0.")
        transaction = BitcoinTransaction(
            network=self.network,
            recipient_address=self.recipient_address,
            value=self.value,
            solvable_utxo=[
                self.get_contract_utxo(wallet, secret, contract=self.contract)
            ])
        transaction.create_unsigned_transaction()
        return transaction
Exemple #3
0
 def redeem(self, wallet, secret):
     if self.balance == 0:
         raise ValueError("Balance of this contract is 0.")
     transaction = BitcoinTransaction(
         network=self.network,
         recipient_address=self.recipient_address,
         value=self.value,
         solvable_utxo=[self.get_contract_utxo(wallet, secret, contract=self.contract)]
     )
     transaction.create_unsigned_transaction()
     return transaction
Exemple #4
0
 def refund(self, wallet):
     if self.locktime > datetime.utcnow():
         locktime_string = self.locktime.strftime('%Y-%m-%d %H:%M:%S')
         raise RuntimeError(f"This contract is still valid! It can't be refunded until {locktime_string} UTC.")
     if self.balance == 0:
         raise ValueError("Balance of this contract is 0.")
     transaction = BitcoinTransaction(
         network=self.network,
         recipient_address=self.refund_address,
         value=self.value,
         solvable_utxo=[self.get_contract_utxo(wallet, refund=True, contract=self.contract)],
         tx_locktime=self.locktime_timestamp,
     )
     transaction.create_unsigned_transaction()
     return transaction
def test_transaction_with_invalid_recipient_address():
    with raises(ValueError, match='Given recipient address is invalid.'):
        BitcoinTransaction(BitcoinTestNet(), 'invalid_address', 0.01, [])