본문으로 건너뛰기

$NEAR 전송

여러 가지 이유로 컨트랙트에서 토큰을 보낼 수 있습니다.

  • 컨트랙트는 스토리지 표준과 같은 것을 사용하며, 등록 취소 시 사용자에게 보증금을 반환해야 합니다.
  • 사용자는 컨트랙트에 수수료를 지불하고, 컨트랙트는 나중에 이러한 수수료를 관리자에게 지불하거나, 사용자에게 재배포하거나, 사용자가 투표하는 원인에 대해 지불합니다.
  • 기타 등등!

블록체인은 우리에게 프로그래밍 가능한 돈을 제공하며, 여기서 핵심은 스마트 컨트랙트가 토큰을 보내는 기능입니다.

NEAR는 이를 쉽게 만듭니다. NEAR 토큰 전송은 스마트 컨트랙트에서 보낼 수 있는 가장 간단한 트랜잭션입니다. 필요한 것은 다음과 같습니다.

let amount: u128 = 1_000_000_000_000_000_000_000_000; // 1 $NEAR as yoctoNEAR
let account_id: AccountId = "example.near".parse().unwrap();

Promise::new(account_id).transfer(amount);

전체 컨트랙트 및 함수 호출의 맥락에서, 이는 다음과 같을 수 있습니다.

use near_sdk::{json_types::U128, near_bindgen, AccountId, Promise};

#[near_bindgen]
pub struct Contract {}

#[near_bindgen]
impl Contract {
pub fn pay(amount: U128, to: AccountId) -> Promise {
Promise::new(to).transfer(amount.0)
}
}

이 중 대부분은 이미 익숙할 것입니다 - 가져오기(import), near_bindgen 설정 , borsh 등을 포함하기 때문입니다. 전송 자체와 관련된 몇 가지 흥미로운 세부 정보는 다음과 같습니다.

  • U128(대문자 U): 여기에 정의된 pay 메서드는 JSON을 입력으로 받아들이고, JS의 숫자는 2^53-1보다 클 수 없으므로, JSON을 JS로 역직렬화하는 것과의 호환성을 위해 정수를 10진수 문자열로 직렬화합니다. transfer 메서드가 yoctoNEAR 단위로 숫자를 받기 때문에, 2^53-1보다 훨씬 더 큰 숫자가 필요할 수 있습니다.

    함수가 입력으로 U128을 받으면, 호출자가 숫자를 문자열로 지정해야 함을 의미합니다. near-sdk-rs는 이를 U128 자료형으로 변환하여 U128 Rust의 기본 u128로 래핑합니다. 기본 u128transfer(amount.0)에서 사용되는 .0으로 검색할 수 있습니다.

  • AccountId: 이는 제공된 문자열이 올바른 형식의 NEAR 계정 ID인지 자동으로 확인하고, 그렇지 않은 경우 유용한 오류와 함께 패닉합니다.

  • Promise 반환 : 이를 통해 NEAR 익스플로러, near-cli, near-api-js 및 기타 도구가 전체 트랜잭션 체인이 성공했는지 여부를 올바르게 결정할 수 있습니다. 함수가 Promise를 반환하지 않으면, near-cli와 같은 도구는 함수 호출 직후에 이를 반환할 것입니다. 그런 다음 transfer가 실패하더라도, 함수 호출은 성공한 것으로 간주됩니다. You can see an example of this behavior here.

Using near-cli or near-cli-rs, someone could invoke this function with a call like:

near call <contract> pay '{"amount": "1000000000000000000000000", "to": "example.near"}' --accountId benjiman.near
Was this page helpful?