@@ -23,22 +23,25 @@ class NftMarketplace(arc4.ARC4Contract):
23
23
NftMarketplace 앱의 상태(state)를 정의하고 초기값을 설정하세요.
24
24
25
25
NftMarketplace 앱은 세개의 상태를 가지고 있습니다.
26
- 1. asset_id: 판매할 에셋(ASA)의 아이디; UInt64타입을 가진 글로벌 상태(Global State) 초기값은 0으로 설정해주세요.
27
- 2. unitary_price: 판매할 에셋(ASA)의 가격. UInt64타입을 가진 글로벌 상태(Global State) 초기값은 0으로 설정해주세요.
28
- 3. bootstrapped: 앱에서 에셋을 판매할 준비가 되었는지 체크하는 bool 타입의 글로벌 상태(Global State). 초기값은 False로 설정해주세요.
29
- bootstrap 메서드가 실행되면 True로 변경됩니다.
26
+ 1. asset_id: 판매할 에셋(ASA)의 아이디; UInt64타입을 가진 글로벌 상태(Global State)
27
+ - 초기값은 0으로 설정해주세요.
28
+ 2. unitary_price: 판매할 에셋(ASA)의 가격. UInt64타입을 가진 글로벌 상태(Global State)
29
+ - 초기값은 0으로 설정해주세요.
30
+ 3. bootstrapped: 앱에서 에셋을 판매할 준비가 되었는지 체크하는 bool 타입의 글로벌 상태(Global State). bootstrap 메서드가 실행되면 True로 변경됩니다.
31
+ - 초기값은 False로 설정해주세요.
30
32
31
33
재밌는 팩트!
32
34
AVM은 Bytes 타입과 UInt64 타입만 지원합니다. 그래서 다른 타입을 사용하고 싶으면 보통 arc4타입을 사용합니다. 하지만
33
35
Algorand Python에서는 bool, string 타입은 파이썬 코드와 동일하게 사용할 수 있습니다. 예를 들어 bool 타입은 True,
34
36
False로 표현하면 되고, string 타입은 "Hello, World!"와 같이 표현하면 됩니다. Algorand Python에서 데이터 타입을
35
37
사용하는 방법은 아래 링크를 참고해주세요.
36
- - arc4 타입: https://algorandfoundation.github.io/puya/lg-types.html#types
38
+ - Python Built in 타입: https://algorandfoundation.github.io/puya/lg-types.html#python-built-in- types
37
39
38
40
팁!
39
- - Global State를 정의할때 simplifed 버전으로 정의하면 간결한 코드로 상태를 정의하고 초기값을 설정할 수 있습니다. 자세한 사항은 아래 힌트 1을 참고해주세요.
41
+ - Global State를 정의할때 simplifed 버전으로 정의하면 간결한 코드로 상태를 정의하고 초기값을 설정할 수 있습니다.
42
+ 자세한 사항은 아래 힌트 1을 참고해주세요.
40
43
41
- 힌트 1 - 글로벌 상태: https://algorandfoundation.github.io/puya/lg-storage.html#global-storage
44
+ 힌트 1 - 글로벌 상태 설정 방법 : https://algorandfoundation.github.io/puya/lg-storage.html#global-storage
42
45
힌트 2 - 코드 예시: https://github.com/algorandfoundation/puya/blob/11843f6bc4bb6e4c56ac53e3980f74df69d07397/examples/global_state/contract.py#L5
43
46
"""
44
47
@@ -59,15 +62,17 @@ def __init__(self) -> None:
59
62
함수 인수 설명:
60
63
- asset: 판매할 에셋(ASA)의 정보를 담고 있는 Asset 타입의 인수입니다.
61
64
- unitary_price: 판매할 에셋(ASA)의 단가를 나타내는 UInt64 타입의 인수입니다.
62
- - mbr_pay: 앱 계정으로 어토믹 그룹에 묶여 동시다발적으로 보내지는 payment 트랜잭션입니다. 이 트랜잭션은 앱 배포자가 앱 계정의 미니멈 밸런스를 채우기 위한 트랜잭션입니다.
65
+ - mbr_pay: 앱 계정으로 어토믹 그룹에 묶여 동시다발적으로 보내지는 payment 트랜잭션입니다. 이 트랜잭션은 앱 배포자가
66
+ 앱 계정의 미니멈 밸런스를 채우기 위한 트랜잭션입니다.
63
67
64
68
# 1단계: assert로 bootstrap 호출 조건을 체크하세요.
65
69
- 메서드 호출자 (Txn.sender)가 앱의 생성자(Global.creator_address)인지 체크하세요.
66
70
- bootstrapped 글로벌 상태가 False인지 체크하세요.
67
71
- mbr_pay 트랜잭션을 받는 계정이 앱 계정인지 체크하세요.
68
72
- mbr_pay의 알고 송금량(amount)이 앱 계정의 미니멈 밸런스(0.1 알고)와 판매할 ASA에 옵트인하기
69
73
위한 미니멈 밸런스(0.1 알고)의 합과 같은지 체크해야합니다.
70
- -> 팁: Global이라는 AVM opcode를 통해 min_balance, asset_opt_in_min_balance와 같은 여러 정보를 열람할 수 있습니다. 자세한 사항은 아래 힌트 1을 참고해주세요.
74
+ -> 팁: Global AVM opcode는 min_balance, asset_opt_in_min_balance와 같은 여러 스마트 계약의
75
+ 전역 정보를 열람할 수 있습니다. 자세한 사항은 아래 힌트 1을 참고해주세요.
71
76
72
77
# 2단계: bootstrap 메서드는 아래 기능들을 수행합니다.
73
78
1. asset_id 글로벌 상태를 인수로 들어온 판매할 ASA 아이디로 업데이트합니다.
@@ -77,7 +82,8 @@ def __init__(self) -> None:
77
82
트랜잭션을 보내는 것이기 때문에 Inner Transaction을 사용해야합니다. 자세한 사항은 힌트
78
83
2를 참고해주세요. 에셋에 옵트인하는 방법은 assetTransfer를 보낼때 0개의 에셋을 본인 계정으로
79
84
보내면 됩니다. 즉, 여기서는 앱 계정이 자기 자신에게 0개의 에셋을 보내면 됩니다.
80
- -> 힌트3에 나와있는 AssetTransfer 인수들 중 필수로 설정해야하는것들은 xfer_asset(보낼 에셋의 아이디), asset_receiver(받는 계정), asset_amount(에셋 송금량)입니다.
85
+ -> 힌트3에 나와있는 AssetTransfer 인수들 중 필수로 설정해야하는것들은 xfer_asset(보낼 에셋의 아이디),
86
+ asset_receiver(받는 계정), asset_amount(에셋 송금량)입니다.
81
87
82
88
힌트 1 - Global Opcode: https://algorandfoundation.github.io/puya/api-algopy.html#algopy.Global
83
89
힌트 2 - How to Inner Transaction: https://algorandfoundation.github.io/puya/lg-transactions.html#inner-transactions
0 commit comments