대체 가능한 토큰 정의
이것은 모든 NEAR FT 표준을 준수하는 완전한 FT 스마트 컨트랙트를 처음부터 만드는 시리즈의 많은 튜토리얼 중 첫 번째입니다. 오늘은 FT가 무엇이고, NEAR 블록체인에서 이를 어떻게 정의할 수 있는지를 배웁니다. 여기서는, 이 기능을 추가하는 데 필요한 필수 코드 스니펫을 작성하여 중요한 스마트 컨트랙트의 뼈대를 수정하게 됩니다.
소개
시작하려면 레퍼지토리 내 1.skeleton
브랜치로 전환하세요. 레퍼지토리를 복제하지 않은 경우 컨트랙트 아키텍처를 참조하여 시작하세요.
튜토리얼의 이 부분에 대한 완성된 코드를 보려면 2.defining-a-token
폴더에서 찾을 수 있습니다.
뼈대 컨트랙트 수정
본질적으로 대체 가능한 토큰(FT)은 나눌 수 있지만 고유하지 않은 교환 가능한 자산입니다. 예를 들어, Benji가 1 캐나다 달러를 가지고 있다면, 이는 Matt의 캐나다 달러와 똑같은 가치가 있을 것입니다. 두 달러 모두 대체 가능하고 교환 가능합니다. 이 경우 대체 가능한 토큰은 캐나다 달러입니다. 모든 화폐는 대체 가능하고 교환 가능합니다.
반면에 대체 불가능한 토큰(NFT)은 집이나 자동차와 같이 고유하고 나눌 수 없습니다. 남들과 정확히 동일한 다른 자산을 가질 수 없습니다. Corvette 1963 C2 Stingray와 같은 특정 자동차 모델이 있더라도, 각 자동차에는 서로 다른 주행 킬로미터 등 별도의 일련 번호가 있습니다.
이제 대체 가능한 토큰이 무엇인지 이해했으므로, 컨트랙트 자체에서 토큰을 정의하는 방법을 살펴보겠습니다.
대체 가능한 토큰(FT) 정의
Start by navigating to the 1.skeleton/src/metadata.rs
file. This is where you'll define the metadata for the fungible token itself. There are several ways NEAR allows you to customize your token, all of which are found in the metadata standard. Let's break them up into the optional and non-optional portions.
Required:
- spec: 컨트랙트에서 사용하는 표준의 버전을 나타냅니다.
ft-1.0.0
로 설정해야 합니다. - name: "Wrapped NEAR" 또는 "TEAM Tokens"와 같이 사람이 읽을 수 있는 토큰 이름입니다.
- symbol:
wNEAR
또는gtNEAR
와 같은 토큰의 약어입니다. - decimals: 토큰의 적절한 유효 숫자를 표시하기 위해 프론트엔드에서 사용됩니다. 이 개념은 이 OpenZeppelin 게시물에 잘 설명되어 있습니다.
Optional:
- icon: 토큰의 이미지(데이터 URL이어야 함)입니다.
- reference: 오프 체인에 저장된 토큰에 대한 추가 JSON 세부 정보에 대한 링크입니다.
- reference_hash: 참조된 JSON의 해시입니다.
With this finished, you can now add these fields to the metadata in the contract.
Loading...
Now that you've defined what the metadata will look like, you need someway to store it on the contract. Switch to the 1.skeleton/src/lib.rs
file and add the following to the Contract
struct. You'll want to store the metadata on the contract under the metadata
field.
Loading...
You've now defined where the metadata will live but you'll also need someway to pass in the metadata itself. This is where the initialization function comes into play.
초기화 함수
You'll now create what's called an initialization function; you can name it new
. This function needs to be invoked when you first deploy the contract. It will initialize all the contract's fields that you've defined with default values. It's important to note that you cannot call these methods more than once.
Loading...
More often than not when doing development, you'll need to deploy contracts several times. You can imagine that it might get tedious to have to pass in metadata every single time you want to initialize the contract. For this reason, let's create a function that can initialize the contract with a set of default metadata
. You can call it new_default_meta
.
Loading...
This function is simply calling the previous new
function and passing in some default metadata behind the scenes.
At this point, you've defined the metadata for your fungible tokens and you've created a way to store this information on the contract. The last step is to introduce a getter that will query for and return the metadata. Switch to the 1.skeleton/src/metadata.rs
file and add the following code to the ft_metadata
function.
Loading...
This function will get the metadata
object from the contract which is of type FungibleTokenMetadata
and will return it.