$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-cli
- near-cli-rs
near call <contract> pay '{"amount": "1000000000000000000000000", "to": "example.near"}' --accountId benjiman.near
near contract call-function as-transaction <contract> pay json-args '{"amount": "1000000000000000000000000", "to": "example.near"}' prepaid-gas '30 TeraGas' attached-deposit '0 NEAR' sign-as benjiman.near network-config testnet sign-with-keychain send