본문으로 건너뛰기

$NEAR 전송

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

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

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

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

let amount = BigInt(1_000_000_000_000_000_000_000_000); // 1 $NEAR as yoctoNEAR
let to = "alice.near";

NearPromise.new(to).transfer(amount);

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

import { NearPromise, NearBindgen } from "near-sdk-js";

@NearBindgen({})
export class Contract {
pay({ amount, to }) {
return NearPromise.new(to).transfer(amount);
}
}

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

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

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

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?