diff --git a/projects/orakle-nft-marketplace-app-contracts/smart_contracts/nft_marketplace/contract.py b/projects/orakle-nft-marketplace-app-contracts/smart_contracts/nft_marketplace/contract.py index d95bf6d..c3338f7 100644 --- a/projects/orakle-nft-marketplace-app-contracts/smart_contracts/nft_marketplace/contract.py +++ b/projects/orakle-nft-marketplace-app-contracts/smart_contracts/nft_marketplace/contract.py @@ -23,22 +23,25 @@ class NftMarketplace(arc4.ARC4Contract): NftMarketplace 앱의 상태(state)를 정의하고 초기값을 설정하세요. NftMarketplace 앱은 세개의 상태를 가지고 있습니다. - 1. asset_id: 판매할 에셋(ASA)의 아이디; UInt64타입을 가진 글로벌 상태(Global State) 초기값은 0으로 설정해주세요. - 2. unitary_price: 판매할 에셋(ASA)의 가격. UInt64타입을 가진 글로벌 상태(Global State) 초기값은 0으로 설정해주세요. - 3. bootstrapped: 앱에서 에셋을 판매할 준비가 되었는지 체크하는 bool 타입의 글로벌 상태(Global State). 초기값은 False로 설정해주세요. - bootstrap 메서드가 실행되면 True로 변경됩니다. + 1. asset_id: 판매할 에셋(ASA)의 아이디; UInt64타입을 가진 글로벌 상태(Global State) + - 초기값은 0으로 설정해주세요. + 2. unitary_price: 판매할 에셋(ASA)의 가격. UInt64타입을 가진 글로벌 상태(Global State) + - 초기값은 0으로 설정해주세요. + 3. bootstrapped: 앱에서 에셋을 판매할 준비가 되었는지 체크하는 bool 타입의 글로벌 상태(Global State). bootstrap 메서드가 실행되면 True로 변경됩니다. + - 초기값은 False로 설정해주세요. 재밌는 팩트! AVM은 Bytes 타입과 UInt64 타입만 지원합니다. 그래서 다른 타입을 사용하고 싶으면 보통 arc4타입을 사용합니다. 하지만 Algorand Python에서는 bool, string 타입은 파이썬 코드와 동일하게 사용할 수 있습니다. 예를 들어 bool 타입은 True, False로 표현하면 되고, string 타입은 "Hello, World!"와 같이 표현하면 됩니다. Algorand Python에서 데이터 타입을 사용하는 방법은 아래 링크를 참고해주세요. - - arc4 타입: https://algorandfoundation.github.io/puya/lg-types.html#types + - Python Built in 타입: https://algorandfoundation.github.io/puya/lg-types.html#python-built-in-types 팁! - - Global State를 정의할때 simplifed 버전으로 정의하면 간결한 코드로 상태를 정의하고 초기값을 설정할 수 있습니다. 자세한 사항은 아래 힌트 1을 참고해주세요. + - Global State를 정의할때 simplifed 버전으로 정의하면 간결한 코드로 상태를 정의하고 초기값을 설정할 수 있습니다. + 자세한 사항은 아래 힌트 1을 참고해주세요. - 힌트 1 - 글로벌 상태: https://algorandfoundation.github.io/puya/lg-storage.html#global-storage + 힌트 1 - 글로벌 상태 설정 방법: https://algorandfoundation.github.io/puya/lg-storage.html#global-storage 힌트 2 - 코드 예시: https://github.com/algorandfoundation/puya/blob/11843f6bc4bb6e4c56ac53e3980f74df69d07397/examples/global_state/contract.py#L5 """ @@ -59,7 +62,8 @@ def __init__(self) -> None: 함수 인수 설명: - asset: 판매할 에셋(ASA)의 정보를 담고 있는 Asset 타입의 인수입니다. - unitary_price: 판매할 에셋(ASA)의 단가를 나타내는 UInt64 타입의 인수입니다. - - mbr_pay: 앱 계정으로 어토믹 그룹에 묶여 동시다발적으로 보내지는 payment 트랜잭션입니다. 이 트랜잭션은 앱 배포자가 앱 계정의 미니멈 밸런스를 채우기 위한 트랜잭션입니다. + - mbr_pay: 앱 계정으로 어토믹 그룹에 묶여 동시다발적으로 보내지는 payment 트랜잭션입니다. 이 트랜잭션은 앱 배포자가 + 앱 계정의 미니멈 밸런스를 채우기 위한 트랜잭션입니다. # 1단계: assert로 bootstrap 호출 조건을 체크하세요. - 메서드 호출자 (Txn.sender)가 앱의 생성자(Global.creator_address)인지 체크하세요. @@ -67,7 +71,8 @@ def __init__(self) -> None: - mbr_pay 트랜잭션을 받는 계정이 앱 계정인지 체크하세요. - mbr_pay의 알고 송금량(amount)이 앱 계정의 미니멈 밸런스(0.1 알고)와 판매할 ASA에 옵트인하기 위한 미니멈 밸런스(0.1 알고)의 합과 같은지 체크해야합니다. - -> 팁: Global이라는 AVM opcode를 통해 min_balance, asset_opt_in_min_balance와 같은 여러 정보를 열람할 수 있습니다. 자세한 사항은 아래 힌트 1을 참고해주세요. + -> 팁: Global AVM opcode는 min_balance, asset_opt_in_min_balance와 같은 여러 스마트 계약의 + 전역 정보를 열람할 수 있습니다. 자세한 사항은 아래 힌트 1을 참고해주세요. # 2단계: bootstrap 메서드는 아래 기능들을 수행합니다. 1. asset_id 글로벌 상태를 인수로 들어온 판매할 ASA 아이디로 업데이트합니다. @@ -77,7 +82,8 @@ def __init__(self) -> None: 트랜잭션을 보내는 것이기 때문에 Inner Transaction을 사용해야합니다. 자세한 사항은 힌트 2를 참고해주세요. 에셋에 옵트인하는 방법은 assetTransfer를 보낼때 0개의 에셋을 본인 계정으로 보내면 됩니다. 즉, 여기서는 앱 계정이 자기 자신에게 0개의 에셋을 보내면 됩니다. - -> 힌트3에 나와있는 AssetTransfer 인수들 중 필수로 설정해야하는것들은 xfer_asset(보낼 에셋의 아이디), asset_receiver(받는 계정), asset_amount(에셋 송금량)입니다. + -> 힌트3에 나와있는 AssetTransfer 인수들 중 필수로 설정해야하는것들은 xfer_asset(보낼 에셋의 아이디), + asset_receiver(받는 계정), asset_amount(에셋 송금량)입니다. 힌트 1 - Global Opcode: https://algorandfoundation.github.io/puya/api-algopy.html#algopy.Global 힌트 2 - How to Inner Transaction: https://algorandfoundation.github.io/puya/lg-transactions.html#inner-transactions diff --git a/projects/orakle-nft-marketplace-app-frontend/src/methods.ts b/projects/orakle-nft-marketplace-app-frontend/src/methods.ts index 2a9c28e..d81ca54 100644 --- a/projects/orakle-nft-marketplace-app-frontend/src/methods.ts +++ b/projects/orakle-nft-marketplace-app-frontend/src/methods.ts @@ -133,7 +133,7 @@ export function buy( 여기서 buyerTxn은 buy 메서드의 인수로 들어가기 때문에 자동으로 어토믹 그룹에 포함됩니다. 따라서 assetOptInTxn만 어토믹 그룹에 추가해주시면 됩니다. 어토믹그룹을 형성하고 execute하는것을 까먹지 마세요! - 힌트1: app client로 어토믹 그룹을 형성, 트랜잭션 추가, 제출하는법: https://github.com/algorandfoundation/algokit-client-generator-ts/blob/main/docs/usage.md#using-the-fluent-composer + 힌트1: fluent Atomic Composer로 어토믹 그룹을 형성, 트랜잭션 추가, 제출하는법: https://github.com/algorandfoundation/algokit-client-generator-ts/blob/main/docs/usage.md#using-the-fluent-composer:~:text=Using%20the%20fluent%20composer */ const buyerTxn = await algorand.transactions.payment({