From b24baaef3871b33fd7492cc641750dddfe9dc09a Mon Sep 17 00:00:00 2001 From: Jerry Date: Tue, 27 Jun 2023 17:21:09 -0700 Subject: [PATCH 1/4] Test transaction chaining --- integration-test/test/test_plutus.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/integration-test/test/test_plutus.py b/integration-test/test/test_plutus.py index acb554c8..caff2484 100644 --- a/integration-test/test/test_plutus.py +++ b/integration-test/test/test_plutus.py @@ -311,3 +311,22 @@ def test_plutus_v2_ref_script(self): self.chain_context.submit_tx(signed_tx) self.assert_output(taker_address, take_output) + + @retry(tries=TEST_RETRIES, backoff=1.5, delay=6, jitter=(0, 4)) + @pytest.mark.post_alonzo + def test_transaction_chaining(self): + giver_address = Address(self.payment_vkey.hash(), network=self.NETWORK) + builder = TransactionBuilder(self.chain_context) + builder.add_input_address(giver_address) + builder.add_output(TransactionOutput(giver_address, 50000000)) + tx1 = builder.build_and_sign([self.payment_skey], giver_address) + + utxo_to_spend = UTxO(TransactionInput(tx1.id, 0), tx1.transaction_body.outputs[0]) + + builder = TransactionBuilder(self.chain_context) + builder.add_input(utxo_to_spend) + builder.add_output(TransactionOutput(giver_address, 25000000)) + tx2 = builder.build_and_sign([self.payment_skey], giver_address) + + self.chain_context.submit_tx(tx1) + self.chain_context.submit_tx(tx2) From 621d113dc5c6622254031d62bf1a1b72aa27c2bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20M=C3=BCndler?= Date: Thu, 8 Jun 2023 11:44:39 +0900 Subject: [PATCH 2/4] Fix reference scripts fetched from ogmios --- pycardano/backend/ogmios.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pycardano/backend/ogmios.py b/pycardano/backend/ogmios.py index c2b10ca8..ea5589d0 100644 --- a/pycardano/backend/ogmios.py +++ b/pycardano/backend/ogmios.py @@ -466,9 +466,9 @@ def _utxo_from_ogmios_result(self, result) -> UTxO: script = output.get("script", None) if script: if "plutus:v2" in script: - script = PlutusV2Script(cbor2.loads(bytes.fromhex(script["plutus:v2"]))) + script = PlutusV2Script(bytes.fromhex(script["plutus:v2"])) elif "plutus:v1" in script: - script = PlutusV1Script(cbor2.loads(bytes.fromhex(script["plutus:v1"]))) + script = PlutusV1Script(bytes.fromhex(script["plutus:v1"])) else: raise ValueError("Unknown plutus script type") datum_hash = ( From b075c41710cab4145da1a53ebe603e3ecb1ba912 Mon Sep 17 00:00:00 2001 From: Jerry Date: Sun, 3 Sep 2023 14:08:50 -0700 Subject: [PATCH 3/4] Add tests --- integration-test/test/test_plutus.py | 43 +++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/integration-test/test/test_plutus.py b/integration-test/test/test_plutus.py index caff2484..784790ff 100644 --- a/integration-test/test/test_plutus.py +++ b/integration-test/test/test_plutus.py @@ -321,7 +321,9 @@ def test_transaction_chaining(self): builder.add_output(TransactionOutput(giver_address, 50000000)) tx1 = builder.build_and_sign([self.payment_skey], giver_address) - utxo_to_spend = UTxO(TransactionInput(tx1.id, 0), tx1.transaction_body.outputs[0]) + utxo_to_spend = UTxO( + TransactionInput(tx1.id, 0), tx1.transaction_body.outputs[0] + ) builder = TransactionBuilder(self.chain_context) builder.add_input(utxo_to_spend) @@ -330,3 +332,42 @@ def test_transaction_chaining(self): self.chain_context.submit_tx(tx1) self.chain_context.submit_tx(tx2) + + @retry(tries=TEST_RETRIES, backoff=1.5, delay=6, jitter=(0, 4)) + @pytest.mark.post_alonzo + def test_get_plutus_script(self): + # ----------- Giver give --------------- + with open("./plutus_scripts/fortytwoV2.plutus", "r") as f: + script_hex = f.read() + forty_two_script = PlutusV2Script(cbor2.loads(bytes.fromhex(script_hex))) + + script_hash = plutus_script_hash(forty_two_script) + + script_address = Address(script_hash, network=self.NETWORK) + + giver_address = Address(self.payment_vkey.hash(), network=self.NETWORK) + + builder = TransactionBuilder(self.chain_context) + builder.add_input_address(giver_address) + builder.add_output( + TransactionOutput(script_address, 50000000, script=forty_two_script) + ) + + signed_tx = builder.build_and_sign([self.payment_skey], giver_address) + + print("############### Transaction created ###############") + print(signed_tx) + print(signed_tx.to_cbor_hex()) + print("############### Submitting transaction ###############") + self.chain_context.submit_tx(signed_tx) + time.sleep(3) + + utxos = self.chain_context.utxos(script_address) + + assert utxos[0].output.script == forty_two_script + + +class TestPlutusOgmiosOnly(TestPlutus): + @classmethod + def setup_class(cls): + cls.chain_context._kupo_url = None From a8d1b0ddb0c8bf2110e6ae2e9c0ada4521ba2a48 Mon Sep 17 00:00:00 2001 From: Jerry Date: Sun, 3 Sep 2023 14:11:07 -0700 Subject: [PATCH 4/4] Remove unused import --- pycardano/backend/ogmios.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pycardano/backend/ogmios.py b/pycardano/backend/ogmios.py index ea5589d0..b829877f 100644 --- a/pycardano/backend/ogmios.py +++ b/pycardano/backend/ogmios.py @@ -4,7 +4,6 @@ from enum import Enum from typing import Any, Dict, List, Optional, Tuple, Union -import cbor2 import requests import websocket from cachetools import Cache, LRUCache, TTLCache, func