Skip to content

Commit 0a95536

Browse files
nielstroncffls
andauthored
Fix reference scripts fetched from ogmios (#254)
* Test transaction chaining * Fix reference scripts fetched from ogmios * Add tests * Remove unused import --------- Co-authored-by: Jerry <jerrycgh@gmail.com>
1 parent 0d5b3d7 commit 0a95536

File tree

2 files changed

+62
-3
lines changed

2 files changed

+62
-3
lines changed

integration-test/test/test_plutus.py

+60
Original file line numberDiff line numberDiff line change
@@ -311,3 +311,63 @@ def test_plutus_v2_ref_script(self):
311311
self.chain_context.submit_tx(signed_tx)
312312

313313
self.assert_output(taker_address, take_output)
314+
315+
@retry(tries=TEST_RETRIES, backoff=1.5, delay=6, jitter=(0, 4))
316+
@pytest.mark.post_alonzo
317+
def test_transaction_chaining(self):
318+
giver_address = Address(self.payment_vkey.hash(), network=self.NETWORK)
319+
builder = TransactionBuilder(self.chain_context)
320+
builder.add_input_address(giver_address)
321+
builder.add_output(TransactionOutput(giver_address, 50000000))
322+
tx1 = builder.build_and_sign([self.payment_skey], giver_address)
323+
324+
utxo_to_spend = UTxO(
325+
TransactionInput(tx1.id, 0), tx1.transaction_body.outputs[0]
326+
)
327+
328+
builder = TransactionBuilder(self.chain_context)
329+
builder.add_input(utxo_to_spend)
330+
builder.add_output(TransactionOutput(giver_address, 25000000))
331+
tx2 = builder.build_and_sign([self.payment_skey], giver_address)
332+
333+
self.chain_context.submit_tx(tx1)
334+
self.chain_context.submit_tx(tx2)
335+
336+
@retry(tries=TEST_RETRIES, backoff=1.5, delay=6, jitter=(0, 4))
337+
@pytest.mark.post_alonzo
338+
def test_get_plutus_script(self):
339+
# ----------- Giver give ---------------
340+
with open("./plutus_scripts/fortytwoV2.plutus", "r") as f:
341+
script_hex = f.read()
342+
forty_two_script = PlutusV2Script(cbor2.loads(bytes.fromhex(script_hex)))
343+
344+
script_hash = plutus_script_hash(forty_two_script)
345+
346+
script_address = Address(script_hash, network=self.NETWORK)
347+
348+
giver_address = Address(self.payment_vkey.hash(), network=self.NETWORK)
349+
350+
builder = TransactionBuilder(self.chain_context)
351+
builder.add_input_address(giver_address)
352+
builder.add_output(
353+
TransactionOutput(script_address, 50000000, script=forty_two_script)
354+
)
355+
356+
signed_tx = builder.build_and_sign([self.payment_skey], giver_address)
357+
358+
print("############### Transaction created ###############")
359+
print(signed_tx)
360+
print(signed_tx.to_cbor_hex())
361+
print("############### Submitting transaction ###############")
362+
self.chain_context.submit_tx(signed_tx)
363+
time.sleep(3)
364+
365+
utxos = self.chain_context.utxos(script_address)
366+
367+
assert utxos[0].output.script == forty_two_script
368+
369+
370+
class TestPlutusOgmiosOnly(TestPlutus):
371+
@classmethod
372+
def setup_class(cls):
373+
cls.chain_context._kupo_url = None

pycardano/backend/ogmios.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
from enum import Enum
55
from typing import Any, Dict, List, Optional, Tuple, Union
66

7-
import cbor2
87
import requests
98
import websocket
109
from cachetools import Cache, LRUCache, TTLCache, func
@@ -466,9 +465,9 @@ def _utxo_from_ogmios_result(self, result) -> UTxO:
466465
script = output.get("script", None)
467466
if script:
468467
if "plutus:v2" in script:
469-
script = PlutusV2Script(cbor2.loads(bytes.fromhex(script["plutus:v2"])))
468+
script = PlutusV2Script(bytes.fromhex(script["plutus:v2"]))
470469
elif "plutus:v1" in script:
471-
script = PlutusV1Script(cbor2.loads(bytes.fromhex(script["plutus:v1"])))
470+
script = PlutusV1Script(bytes.fromhex(script["plutus:v1"]))
472471
else:
473472
raise ValueError("Unknown plutus script type")
474473
datum_hash = (

0 commit comments

Comments
 (0)