Skip to content

Commit

Permalink
instruction update
Browse files Browse the repository at this point in the history
  • Loading branch information
iskysun96 committed May 31, 2024
1 parent 1ab80c4 commit 0079d1f
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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
"""

Expand All @@ -59,15 +62,17 @@ 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)인지 체크하세요.
- bootstrapped 글로벌 상태가 False인지 체크하세요.
- 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 아이디로 업데이트합니다.
Expand All @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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({
Expand Down

0 comments on commit 0079d1f

Please sign in to comment.