Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 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
6 changes: 3 additions & 3 deletions package-lock.json

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

53 changes: 46 additions & 7 deletions src/transaction/transaction.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import { AlgoAmount } from '../types/amount'
import { AppClient } from '../types/app-client'
import { PaymentParams, TransactionComposer } from '../types/composer'
import { Arc2TransactionNote } from '../types/transaction'
import { getABIReturnValue, waitForConfirmation } from './transaction'
import { getABIReturnValue, populateAppCallResources, waitForConfirmation } from './transaction'

describe('transaction', () => {
const localnet = algorandFixture()
Expand Down Expand Up @@ -787,12 +787,12 @@ const resourcePopulationTests = (version: 8 | 9) => () => {
let alice: Address & Account

describe('accounts', () => {
test('addressBalance: invalid Account reference', async () => {
test('addressBalance: unavailable Account', async () => {
const { testAccount } = fixture.context
alice = testAccount
await expect(
appClient.send.call({ method: 'addressBalance', args: [testAccount.toString()], populateAppCallResources: false }),
).rejects.toThrow('invalid Account reference')
).rejects.toThrow('unavailable Account')
})

test('addressBalance', async () => {
Expand Down Expand Up @@ -846,7 +846,7 @@ const resourcePopulationTests = (version: 8 | 9) => () => {
})

describe('cross-product references', () => {
const hasAssetErrorMsg = version === 8 ? 'invalid Account reference' : 'unavailable Account'
const hasAssetErrorMsg = version === 8 ? 'unavailable Account' : 'unavailable Account'

test(`hasAsset: ${hasAssetErrorMsg}`, async () => {
const { testAccount } = fixture.context
Expand Down Expand Up @@ -885,14 +885,14 @@ const resourcePopulationTests = (version: 8 | 9) => () => {
})

describe('sendTransaction', () => {
test('addressBalance: invalid Account reference', async () => {
test('addressBalance: unavailable Account', async () => {
await expect(
appClient.send.call({
method: 'addressBalance',
args: [algosdk.generateAccount().addr.toString()],
populateAppCallResources: false,
}),
).rejects.toThrow('invalid Account reference')
).rejects.toThrow('unavailable Account')
})

test('addressBalance', async () => {
Expand Down Expand Up @@ -996,11 +996,15 @@ describe('Resource population: meta', () => {

let externalClient: AppClient

let testAccount: algosdk.Address & algosdk.Account

beforeEach(fixture.newScope)

beforeAll(async () => {
await fixture.newScope()
const { algorand, testAccount } = fixture.context
const { algorand, testAccount: ta } = fixture.context
testAccount = ta

Config.configure({ populateAppCallResources: true })

const factory = algorand.client.getAppFactory({
Expand Down Expand Up @@ -1072,6 +1076,41 @@ describe('Resource population: meta', () => {

expect(res.transaction.applicationCall?.accounts?.length || 0).toBe(0)
})

test('create box in new app', async () => {
const { algorand } = fixture

await externalClient.fundAppAccount({ amount: (200_000).microAlgo() })

await externalClient.send.call({
method: 'createBoxInNewApp',
args: [algorand.createTransaction.payment({ sender: testAccount, receiver: externalClient.appAddress, amount: (1).algo() })],
staticFee: (4_000).microAlgo(),
})
Comment thread
neilcampbell marked this conversation as resolved.
Outdated
})

test('box ref for create box in new app', async () => {
const { algorand } = fixture

await externalClient.fundAppAccount({ amount: (200_000).microAlgo() })

const txn = await externalClient.createTransaction.call({
method: 'createBoxInNewApp',
args: [algorand.createTransaction.payment({ sender: testAccount, receiver: externalClient.appAddress, amount: (1).algo() })],
staticFee: (4_000).microAlgo(),
})

const atc = new algosdk.AtomicTransactionComposer()

for (const tx of txn.transactions) {
atc.addTransaction({ txn: tx, signer: algosdk.makeBasicAccountTransactionSigner(testAccount) })
}

const populatedAtc = await populateAppCallResources(atc, algorand.client.algod)
const boxRef = populatedAtc.buildGroup()[1].txn.applicationCall?.boxes?.[0]
expect(boxRef).toBeDefined()
expect(boxRef?.appIndex).toBe(0n)
})
})

describe('abi return', () => {
Expand Down

Large diffs are not rendered by default.

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/example-contracts/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
Loading