Skip to content
Open
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
5 changes: 4 additions & 1 deletion challenge/__test__/algorand-puzzle-2.test.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { describe, test, expect, beforeAll, beforeEach } from '@jest/globals';
import { algorandFixture } from '@algorandfoundation/algokit-utils/testing';
import { algorandFixture, algoKitLogCaptureFixture } from '@algorandfoundation/algokit-utils/testing';
import { AlgorandPuzzle2Client } from '../contracts/clients/AlgorandPuzzle2Client';

const fixture = algorandFixture();
Expand Down Expand Up @@ -27,7 +27,10 @@ describe('AlgorandPuzzle2', () => {

test('solveThePuzzle', async () => {
const result = await appClient.solveThePuzzle({});
const logs = algoKitLogCaptureFixture();
console.log(result.return);
const capturedLogs = logs?.testLogger?.capturedLogs;
console.log(capturedLogs);
expect(result.return).toBe('You solved the puzzle!');
});
});
2 changes: 1 addition & 1 deletion challenge/contracts/algorand-puzzle-2.algo.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@ import { Contract } from '@algorandfoundation/tealscript';
// eslint-disable-next-line no-unused-vars
class AlgorandPuzzle2 extends Contract {
solveThePuzzle(): string {
// return 'You solved the puzzle!';
return 'You solved the puzzle!';
}
}
25 changes: 12 additions & 13 deletions challenge/contracts/artifacts/AlgorandPuzzle2.approval.teal
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#pragma version 10
#pragma version 9

// This TEAL was generated by TEALScript v0.86.0
// This TEAL was generated by TEALScript v0.74.0
// https://github.com/algorandfoundation/TEALScript

// This contract is compliant with and/or implements the following ARCs: [ ARC4 ]
Expand All @@ -9,20 +9,19 @@
// This pattern is used to make it easy for anyone to parse the start of the program and determine if a specific action is allowed
// Here, action refers to the OnComplete in combination with whether the app is being created or called
// Every possible action for this contract is represented in the switch statement
// If the action is not implemented in the contract, its respective branch will be "*NOT_IMPLEMENTED" which just contains "err"
// If the action is not implmented in the contract, its respective branch will be "NOT_IMPLEMENTED" which just contains "err"
txn ApplicationID
!
int 6
*
txn OnCompletion
+
switch *call_NoOp *NOT_IMPLEMENTED *NOT_IMPLEMENTED *NOT_IMPLEMENTED *NOT_IMPLEMENTED *NOT_IMPLEMENTED *create_NoOp *NOT_IMPLEMENTED *NOT_IMPLEMENTED *NOT_IMPLEMENTED *NOT_IMPLEMENTED *NOT_IMPLEMENTED
switch call_NoOp NOT_IMPLEMENTED NOT_IMPLEMENTED NOT_IMPLEMENTED NOT_IMPLEMENTED NOT_IMPLEMENTED create_NoOp NOT_IMPLEMENTED NOT_IMPLEMENTED NOT_IMPLEMENTED NOT_IMPLEMENTED NOT_IMPLEMENTED

*NOT_IMPLEMENTED:
NOT_IMPLEMENTED:
err

// solveThePuzzle()string
*abi_route_solveThePuzzle:
abi_route_solveThePuzzle:
// The ABI return prefix
byte 0x151f7c75

Expand All @@ -39,7 +38,7 @@ switch *call_NoOp *NOT_IMPLEMENTED *NOT_IMPLEMENTED *NOT_IMPLEMENTED *NOT_IMPLEM
int 1
return

// solveThePuzzle(): string
// solveThePuzzle()string
solveThePuzzle:
proto 0 1

Expand All @@ -48,18 +47,18 @@ solveThePuzzle:
byte 0x596f7520736f6c766564207468652070757a7a6c6521 // "You solved the puzzle!"
retsub

*abi_route_createApplication:
abi_route_createApplication:
int 1
return

*create_NoOp:
create_NoOp:
method "createApplication()void"
txna ApplicationArgs 0
match *abi_route_createApplication
match abi_route_createApplication
err

*call_NoOp:
call_NoOp:
method "solveThePuzzle()string"
txna ApplicationArgs 0
match *abi_route_solveThePuzzle
match abi_route_solveThePuzzle
err
4 changes: 2 additions & 2 deletions challenge/contracts/artifacts/AlgorandPuzzle2.arc32.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,8 @@
}
},
"source": {
"approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjg2LjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJZXJyCgovLyBzb2x2ZVRoZVB1enpsZSgpc3RyaW5nCiphYmlfcm91dGVfc29sdmVUaGVQdXp6bGU6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGV4ZWN1dGUgc29sdmVUaGVQdXp6bGUoKXN0cmluZwoJY2FsbHN1YiBzb2x2ZVRoZVB1enpsZQoJZHVwCglsZW4KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBzb2x2ZVRoZVB1enpsZSgpOiBzdHJpbmcKc29sdmVUaGVQdXp6bGU6Cglwcm90byAwIDEKCgkvLyBjb250cmFjdHMvYWxnb3JhbmQtcHV6emxlLTIuYWxnby50czo4CgkvLyByZXR1cm4gJ1lvdSBzb2x2ZWQgdGhlIHB1enpsZSEnOwoJYnl0ZSAweDU5NmY3NTIwNzM2ZjZjNzY2NTY0MjA3NDY4NjUyMDcwNzU3YTdhNmM2NTIxIC8vICJZb3Ugc29sdmVkIHRoZSBwdXp6bGUhIgoJcmV0c3ViCgoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJaW50IDEKCXJldHVybgoKKmNyZWF0ZV9Ob09wOgoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAic29sdmVUaGVQdXp6bGUoKXN0cmluZyIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfc29sdmVUaGVQdXp6bGUKCWVycg==",
"clear": "I3ByYWdtYSB2ZXJzaW9uIDEw"
"approval": "I3ByYWdtYSB2ZXJzaW9uIDkKCi8vIFRoaXMgVEVBTCB3YXMgZ2VuZXJhdGVkIGJ5IFRFQUxTY3JpcHQgdjAuNzQuMAovLyBodHRwczovL2dpdGh1Yi5jb20vYWxnb3JhbmRmb3VuZGF0aW9uL1RFQUxTY3JpcHQKCi8vIFRoaXMgY29udHJhY3QgaXMgY29tcGxpYW50IHdpdGggYW5kL29yIGltcGxlbWVudHMgdGhlIGZvbGxvd2luZyBBUkNzOiBbIEFSQzQgXQoKLy8gVGhlIGZvbGxvd2luZyB0ZW4gbGluZXMgb2YgVEVBTCBoYW5kbGUgaW5pdGlhbCBwcm9ncmFtIGZsb3cKLy8gVGhpcyBwYXR0ZXJuIGlzIHVzZWQgdG8gbWFrZSBpdCBlYXN5IGZvciBhbnlvbmUgdG8gcGFyc2UgdGhlIHN0YXJ0IG9mIHRoZSBwcm9ncmFtIGFuZCBkZXRlcm1pbmUgaWYgYSBzcGVjaWZpYyBhY3Rpb24gaXMgYWxsb3dlZAovLyBIZXJlLCBhY3Rpb24gcmVmZXJzIHRvIHRoZSBPbkNvbXBsZXRlIGluIGNvbWJpbmF0aW9uIHdpdGggd2hldGhlciB0aGUgYXBwIGlzIGJlaW5nIGNyZWF0ZWQgb3IgY2FsbGVkCi8vIEV2ZXJ5IHBvc3NpYmxlIGFjdGlvbiBmb3IgdGhpcyBjb250cmFjdCBpcyByZXByZXNlbnRlZCBpbiB0aGUgc3dpdGNoIHN0YXRlbWVudAovLyBJZiB0aGUgYWN0aW9uIGlzIG5vdCBpbXBsbWVudGVkIGluIHRoZSBjb250cmFjdCwgaXRzIHJlc3BlY3RpdmUgYnJhbmNoIHdpbGwgYmUgIk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCBjYWxsX05vT3AgTk9UX0lNUExFTUVOVEVEIE5PVF9JTVBMRU1FTlRFRCBOT1RfSU1QTEVNRU5URUQgTk9UX0lNUExFTUVOVEVEIE5PVF9JTVBMRU1FTlRFRCBjcmVhdGVfTm9PcCBOT1RfSU1QTEVNRU5URUQgTk9UX0lNUExFTUVOVEVEIE5PVF9JTVBMRU1FTlRFRCBOT1RfSU1QTEVNRU5URUQgTk9UX0lNUExFTUVOVEVECgpOT1RfSU1QTEVNRU5URUQ6CgllcnIKCmFiaV9yb3V0ZV9zb2x2ZVRoZVB1enpsZToKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gZXhlY3V0ZSBzb2x2ZVRoZVB1enpsZSgpc3RyaW5nCgljYWxsc3ViIHNvbHZlVGhlUHV6emxlCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIHNvbHZlVGhlUHV6emxlKClzdHJpbmcKc29sdmVUaGVQdXp6bGU6Cglwcm90byAwIDEKCgkvLyBjb250cmFjdHMvYWxnb3JhbmQtcHV6emxlLTIuYWxnby50czo4CgkvLyByZXR1cm4gJ1lvdSBzb2x2ZWQgdGhlIHB1enpsZSEnOwoJYnl0ZSAweDU5NmY3NTIwNzM2ZjZjNzY2NTY0MjA3NDY4NjUyMDcwNzU3YTdhNmM2NTIxIC8vICJZb3Ugc29sdmVkIHRoZSBwdXp6bGUhIgoJcmV0c3ViCgphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb246CglpbnQgMQoJcmV0dXJuCgpjcmVhdGVfTm9PcDoKCW1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCBhYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCWVycgoKY2FsbF9Ob09wOgoJbWV0aG9kICJzb2x2ZVRoZVB1enpsZSgpc3RyaW5nIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggYWJpX3JvdXRlX3NvbHZlVGhlUHV6emxlCgllcnI=",
"clear": "I3ByYWdtYSB2ZXJzaW9uIDk="
},
"contract": {
"name": "AlgorandPuzzle2",
Expand Down
2 changes: 1 addition & 1 deletion challenge/contracts/artifacts/AlgorandPuzzle2.clear.teal
Original file line number Diff line number Diff line change
@@ -1 +1 @@
#pragma version 10
#pragma version 9
50 changes: 25 additions & 25 deletions challenge/contracts/artifacts/AlgorandPuzzle2.src_map.json
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@
]
},
{
"teal": 27,
"teal": 26,
"source": 7,
"pc": [
40,
Expand All @@ -106,7 +106,7 @@
]
},
{
"teal": 30,
"teal": 29,
"source": 7,
"pc": [
46,
Expand All @@ -115,28 +115,28 @@
]
},
{
"teal": 31,
"teal": 30,
"source": 7,
"pc": [
49
]
},
{
"teal": 32,
"teal": 31,
"source": 7,
"pc": [
50
]
},
{
"teal": 33,
"teal": 32,
"source": 7,
"pc": [
51
]
},
{
"teal": 34,
"teal": 33,
"source": 7,
"pc": [
52,
Expand All @@ -145,49 +145,49 @@
]
},
{
"teal": 35,
"teal": 34,
"source": 7,
"pc": [
55
]
},
{
"teal": 36,
"teal": 35,
"source": 7,
"pc": [
56
]
},
{
"teal": 37,
"teal": 36,
"source": 7,
"pc": [
57
]
},
{
"teal": 38,
"teal": 37,
"source": 7,
"pc": [
58
]
},
{
"teal": 39,
"teal": 38,
"source": 7,
"pc": [
59
]
},
{
"teal": 40,
"teal": 39,
"source": 7,
"pc": [
60
]
},
{
"teal": 44,
"teal": 43,
"source": 7,
"pc": [
61,
Expand All @@ -196,7 +196,7 @@
]
},
{
"teal": 48,
"teal": 47,
"source": 8,
"pc": [
64,
Expand Down Expand Up @@ -226,28 +226,28 @@
]
},
{
"teal": 49,
"teal": 48,
"source": 8,
"pc": [
88
]
},
{
"teal": 52,
"teal": 51,
"source": 6,
"pc": [
89
]
},
{
"teal": 53,
"teal": 52,
"source": 6,
"pc": [
90
]
},
{
"teal": 56,
"teal": 55,
"source": 6,
"pc": [
91,
Expand All @@ -259,7 +259,7 @@
]
},
{
"teal": 57,
"teal": 56,
"source": 6,
"pc": [
97,
Expand All @@ -268,7 +268,7 @@
]
},
{
"teal": 58,
"teal": 57,
"source": 6,
"pc": [
100,
Expand All @@ -278,14 +278,14 @@
]
},
{
"teal": 59,
"teal": 58,
"source": 6,
"pc": [
104
]
},
{
"teal": 62,
"teal": 61,
"source": 6,
"pc": [
105,
Expand All @@ -297,7 +297,7 @@
]
},
{
"teal": 63,
"teal": 62,
"source": 6,
"pc": [
111,
Expand All @@ -306,7 +306,7 @@
]
},
{
"teal": 64,
"teal": 63,
"source": 6,
"pc": [
114,
Expand All @@ -316,7 +316,7 @@
]
},
{
"teal": 65,
"teal": 64,
"source": 6,
"pc": [
118
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
/* eslint-disable no-console */
import { ReactNode, useState } from 'react'
import { AlgorandPuzzle2, AlgorandPuzzle2Client } from '../contracts/DaoClient'
import { useWallet } from '@txnlab/use-wallet'

/* Example usage
<AlgorandPuzzle2CreateApplication
buttonClass="btn m-2"
buttonLoadingNode={<span className="loading loading-spinner" />}
buttonNode="Call createApplication"
typedClient={typedClient}
/>
*/
type Props = {
buttonClass: string
buttonLoadingNode?: ReactNode
buttonNode: ReactNode
typedClient: AlgorandPuzzle2Client
}

const AlgorandPuzzle2CreateApplication = (props: Props) => {
const [loading, setLoading] = useState<boolean>(false)
const { activeAddress, signer } = useWallet()
const sender = { signer, addr: activeAddress! }

const callMethod = async () => {
setLoading(true)
console.log(`Calling createApplication`)
await props.typedClient.create.createApplication(
{},
{ sender },
)
setLoading(false)
}

return (
<button className={props.buttonClass} onClick={callMethod}>
{loading ? props.buttonLoadingNode || props.buttonNode : props.buttonNode}
</button>
)
}

export default AlgorandPuzzle2CreateApplication
Loading