Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ readme = "README.md"

[tool.poetry.dependencies]
python = "^3.10"
py-algorand-sdk = "^2.4.0"
py-algorand-sdk = "^2.11.0"
httpx = ">=0.23.1,<=0.28.1"
typing-extensions = ">=4.6.0"

Expand Down
4 changes: 2 additions & 2 deletions tests/applications/test_app_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -358,7 +358,7 @@ def test_construct_transaction_with_boxes(test_app_client: AppClient) -> None:
)

assert isinstance(call.transactions[0], algosdk.transaction.ApplicationCallTxn)
assert call.transactions[0].boxes == [BoxReference(app_id=0, name=b"1")]
assert call.transactions[0].boxes == [BoxReference(app_id=0, name=b"1")] # type: ignore # noqa: PGH003

# Test with string box reference
call2 = test_app_client.create_transaction.call(
Expand All @@ -370,7 +370,7 @@ def test_construct_transaction_with_boxes(test_app_client: AppClient) -> None:
)

assert isinstance(call2.transactions[0], algosdk.transaction.ApplicationCallTxn)
assert call2.transactions[0].boxes == [BoxReference(app_id=0, name=b"1")]
assert call2.transactions[0].boxes == [BoxReference(app_id=0, name=b"1")] # type: ignore # noqa: PGH003


def test_construct_transaction_with_abi_encoding_including_transaction(
Expand Down
19 changes: 18 additions & 1 deletion tests/artifacts/resource-packer/ExternalApp.arc32.json

Large diffs are not rendered by default.

65 changes: 65 additions & 0 deletions tests/artifacts/resource-packer/InnerBoxApp.arc32.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
{
"hints": {
"createEmptyBox()void": {
"call_config": {
"no_op": "CALL"
}
},
"createApplication()void": {
"call_config": {
"no_op": "CREATE"
}
}
},
"bare_call_config": {
"no_op": "NEVER",
"opt_in": "NEVER",
"close_out": "NEVER",
"update_application": "NEVER",
"delete_application": "NEVER"
},
"schema": {
"local": {
"declared": {},
"reserved": {}
},
"global": {
"declared": {},
"reserved": {}
}
},
"state": {
"global": {
"num_byte_slices": 0,
"num_uints": 0
},
"local": {
"num_byte_slices": 0,
"num_uints": 0
}
},
"source": {
"approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCmludGNibG9jayAxCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjEwNi4zCi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbGdvcmFuZGZvdW5kYXRpb24vVEVBTFNjcmlwdAoKLy8gVGhpcyBjb250cmFjdCBpcyBjb21wbGlhbnQgd2l0aCBhbmQvb3IgaW1wbGVtZW50cyB0aGUgZm9sbG93aW5nIEFSQ3M6IFsgQVJDNCBdCgovLyBUaGUgZm9sbG93aW5nIHRlbiBsaW5lcyBvZiBURUFMIGhhbmRsZSBpbml0aWFsIHByb2dyYW0gZmxvdwovLyBUaGlzIHBhdHRlcm4gaXMgdXNlZCB0byBtYWtlIGl0IGVhc3kgZm9yIGFueW9uZSB0byBwYXJzZSB0aGUgc3RhcnQgb2YgdGhlIHByb2dyYW0gYW5kIGRldGVybWluZSBpZiBhIHNwZWNpZmljIGFjdGlvbiBpcyBhbGxvd2VkCi8vIEhlcmUsIGFjdGlvbiByZWZlcnMgdG8gdGhlIE9uQ29tcGxldGUgaW4gY29tYmluYXRpb24gd2l0aCB3aGV0aGVyIHRoZSBhcHAgaXMgYmVpbmcgY3JlYXRlZCBvciBjYWxsZWQKLy8gRXZlcnkgcG9zc2libGUgYWN0aW9uIGZvciB0aGlzIGNvbnRyYWN0IGlzIHJlcHJlc2VudGVkIGluIHRoZSBzd2l0Y2ggc3RhdGVtZW50Ci8vIElmIHRoZSBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoZSBjb250cmFjdCwgaXRzIHJlc3BlY3RpdmUgYnJhbmNoIHdpbGwgYmUgIipOT1RfSU1QTEVNRU5URUQiIHdoaWNoIGp1c3QgY29udGFpbnMgImVyciIKdHhuIEFwcGxpY2F0aW9uSUQKIQpwdXNoaW50IDYKKgp0eG4gT25Db21wbGV0aW9uCisKc3dpdGNoICpjYWxsX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpjcmVhdGVfTm9PcCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQKCipOT1RfSU1QTEVNRU5URUQ6CgkvLyBUaGUgcmVxdWVzdGVkIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBjb250cmFjdC4gQXJlIHlvdSB1c2luZyB0aGUgY29ycmVjdCBPbkNvbXBsZXRlPyBEaWQgeW91IHNldCB5b3VyIGFwcCBJRD8KCWVycgoKLy8gY3JlYXRlRW1wdHlCb3goKXZvaWQKKmFiaV9yb3V0ZV9jcmVhdGVFbXB0eUJveDoKCS8vIGV4ZWN1dGUgY3JlYXRlRW1wdHlCb3goKXZvaWQKCWNhbGxzdWIgY3JlYXRlRW1wdHlCb3gKCWludGMgMCAvLyAxCglyZXR1cm4KCi8vIGNyZWF0ZUVtcHR5Qm94KCk6IHZvaWQKY3JlYXRlRW1wdHlCb3g6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9leGFtcGxlLWNvbnRyYWN0cy9yZXNvdXJjZS1wYWNrZXIvcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6NjEKCS8vIHRoaXMuZW1wdHlCb3guY3JlYXRlKCkKCXB1c2hieXRlcyAweDY1NmQ3MDc0Nzk0MjZmNzggLy8gImVtcHR5Qm94IgoJcHVzaGludCAwCglib3hfY3JlYXRlCglwb3AKCXJldHN1YgoKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCWludGMgMCAvLyAxCglyZXR1cm4KCipjcmVhdGVfTm9PcDoKCXB1c2hieXRlcyAweGI4NDQ3YjM2IC8vIG1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uCgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNyZWF0ZSBOb09wCgllcnIKCipjYWxsX05vT3A6CglwdXNoYnl0ZXMgMHhhNjhiZDI5NyAvLyBtZXRob2QgImNyZWF0ZUVtcHR5Qm94KCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9jcmVhdGVFbXB0eUJveAoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjYWxsIE5vT3AKCWVycg==",
"clear": "I3ByYWdtYSB2ZXJzaW9uIDEw"
},
"contract": {
"name": "InnerBoxApp",
"desc": "",
"methods": [
{
"name": "createEmptyBox",
"args": [],
"returns": {
"type": "void"
}
},
{
"name": "createApplication",
"args": [],
"returns": {
"type": "void"
}
}
]
}
}

Large diffs are not rendered by default.

Large diffs are not rendered by default.

31 changes: 30 additions & 1 deletion tests/artifacts/resource-packer/resource-packer.algo.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ class ExternalApp extends Contract {
dummy(): void {}

error(): void {
throw Error()
throw Error('Some error')
}

boxWithPayment(_payment: PayTxn): void {
Expand All @@ -31,6 +31,35 @@ class ExternalApp extends Contract {
senderAssetBalance(): void {
assert(!this.txn.sender.isOptedInToAsset(this.asa.value))
}

createBoxInNewApp(mbrPayment: PayTxn): void {
verifyPayTxn(mbrPayment, {
receiver: this.app.address,
})

sendMethodCall<[], void>({
name: 'createApplication',
approvalProgram: InnerBoxApp.approvalProgram(),
clearStateProgram: InnerBoxApp.clearProgram(),
})

const appId = this.itxn.createdApplicationID
const appAddr = appId.address

sendPayment({ receiver: appAddr, amount: mbrPayment.amount })

sendMethodCall<typeof InnerBoxApp.prototype.createEmptyBox>({
applicationID: appId,
})
}
}

class InnerBoxApp extends Contract {
emptyBox = BoxKey<StaticBytes<0>>()

createEmptyBox(): void {
this.emptyBox.create()
}
}

// eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars
Expand Down
24 changes: 24 additions & 0 deletions tests/transactions/test_resource_packing.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
from algokit_utils.applications.app_factory import AppFactoryCreateMethodCallParams
from algokit_utils.errors.logic_error import LogicError
from algokit_utils.models.amount import AlgoAmount
from algokit_utils.transactions.transaction_composer import PaymentParams


@pytest.fixture
Expand Down Expand Up @@ -404,3 +405,26 @@ def test_rekeyed_account(self, algorand: AlgorandClient, funded_account: Signing
result = self.external_client.send.call(AppClientMethodCallParams(method="senderAssetBalance"))

assert len(getattr(result.transaction.application_call, "accounts", None) or []) == 0

def test_create_box_in_new_app(self, algorand: AlgorandClient, funded_account: SigningAccount) -> None:
self.external_client.fund_app_account(FundAppAccountParams(amount=AlgoAmount.from_micro_algo(200_000)))

result = self.external_client.send.call(
AppClientMethodCallParams(
method="createBoxInNewApp",
args=[
algorand.create_transaction.payment(
PaymentParams(
sender=funded_account.address,
receiver=self.external_client.app_address,
amount=AlgoAmount.from_algo(1),
)
)
],
static_fee=AlgoAmount.from_micro_algo(4_000),
),
)

box_ref = result.transaction.application_call.boxes[0] if result.transaction.application_call.boxes else None
assert box_ref is not None
assert box_ref.app_index == 0 # type: ignore # noqa: PGH003
Loading