Rust 스마트 컨트랙트 개발일지 (3)
BlockSec
2022-03-29 10:29
本文约4130字,阅读全文需要约17分钟
계약 배포, 함수 호출 및 탐색기 사용.

관련 기사:

Rust 스마트 계약 개발 일기 (2) Rust 스마트 계약 단위 테스트 작성

Rust 스마트 컨트랙트 개발 블로그 이번 호에서 BlockSec은 간단한 샘플 스마트 컨트랙트를 NEAR 테스트 네트워크(TestNet)에 배포하고, 컨트랙트를 실행하고, 컨트랙트의 실행 결과를 쿼리하는 방법을 소개합니다.

컨트랙트 개발자가 컨트랙트의 메인 로직을 구현하고 단위 테스트를 수행하면 개발자는 컨트랙트 프로젝트를 WASM 바이트코드로 컴파일하고 NEAR의 테스트 체인에 배포하여 메인넷(MainNet)에 최종 배포할 준비를 할 수 있습니다.

1. NEAR 네트워크 소개

프로토콜로서의 NEAR 프로토콜은 이 프로토콜을 기반으로 여러 개의 독립적인 네트워크가 있을 수 있음을 의미합니다. 사양 및 표준 NEAR 프로토콜이 공식화한 NEAR 프로토콜 사양 및 표준은 NEAR 프로토콜을 기반으로 서로 다른 체인을 지정하며 생성 블록 구성의 GenesisConfig의 chain_id가 다릅니다.

  • TestNet

    우리가 일반적으로 사용하는 주로 세 가지 유형의 네트워크가 있습니다.

  • MainNet

    모든 스마트 계약 프로젝트는 궁극적으로 프로젝트의 기능을 실현하기 위해 블록체인 네트워크에서 실행되어야 합니다. 그러나 새 프로젝트의 경우 프로젝트 팀은 스마트 계약 프로젝트의 기능 및 관련 비즈니스 논리를 테스트하기 위해 테스트 네트워크(TestNet)에 프로젝트를 배포하는 경우가 많습니다.

  • LocalNet

    계약이 테스트 네트워크에서 여러 차례의 테스트와 독립적인 보안 검토(필요한 경우)를 거친 후 개발 팀은 계약을 메인 네트워크(메인넷)에 공식적으로 배포하도록 선택할 수 있습니다.

LocalNet은 TestNet과 다릅니다. LocalNet은 로컬에서 실행되므로 체인에 배포된 계약 및 트랜잭션 데이터가 외부 네트워크에 공개되지 않습니다. 개발자가 계약 프로젝트가 TestNet 또는 MainNet에 배포되기 전에 계약 프로젝트에 대한 중요한 정보를 유출하고 싶지 않다면 LocalNet이 좋은 선택이 될 것입니다.

2. NEAR CLI 설치

$ sudo npm install -g near-cli

NEAR CLI(명령줄 인터페이스)는 위에서 설명한 네트워크에 연결하고 상호 작용하기 위해 near-api-js를 사용하는 NodeJS 명령줄 인터페이스입니다. 따라서 설치 전에 npm(full name Node Package Manager)을 설치해야 하며, npm을 사용하여 Linux에서 다음 설치 명령을 실행하여 NEAR CLI를 설치합니다.

$ near --version

다음 명령을 실행하여 NEAR CLI의 설치된 버전을 확인하고 설치 성공 여부를 확인합니다.

3. TestNet에 계약 배포

3.1 TestNet 계정 등록https://wallet.testnet.near.org신규 사용자는 다음으로 이동할 수 있습니다.

페이지에 새 TestNet 지갑을 등록하려면 등록을 완료하기 위해 statusmessage.testnet과 같은 사용자 이름만 입력하면 됩니다.https://explorer.testnet.near.org그런 다음

, 다음과 같이 TestNet에서 계정에 대한 관련 정보를 검색하고 볼 수 있습니다.

TestNet에서 새로 생성된 각 계정에는 200Ⓝ의 원시 잔액이 포함됩니다.

3.2 NEAR CLI에서 계정에 로그인

$ near login

NEAR CLI를 설치하고 NEAR TestNet에서 사용자 계정을 신청했기 때문입니다. 다음과 같이 NAER CLI에서 계정에 로그인을 시도할 수 있습니다.

위의 명령 실행 후 NEAR CLI는 링크를 호출하고 사용자가 수동으로 클릭하여 위의 statusmessage.testnet 계정에 로그인하도록 요구합니다.

3.3 계정 관련 정보 보기

$ near state statusmessage.testnet
Account statusmessage.testnet
{    amount: '199999959035075000000000000',
     block_hash: '8iomNEFNa4LQB54ehTPBGu8bBfotistoWrBcYJfxm8vA',
     block_height: 68318068,
     code_hash: '11111111111111111111111111111111',
     locked: '0',
     storage_paid_at: 0,
     storage_usage: 264,
     formattedAmount: '199.999959035075' 
}

동시에 NEAR CLI를 통해 특정 계정의 관련 정보를 조회할 수 있습니다.

3.4 컨트랙트 편집 및 배포

$ RUSTFLAGS='-C link-arg=-s' cargo +stable build --target wasm32-unknown-unknown --release

컨트랙트를 배포하기 전에 먼저 컨트랙트를 컴파일해야 합니다. 다음 명령을 사용하여 특정 WASM 파일 status_message.wasm을 cargo와 함께 컴파일할 수 있습니다. 일반적으로 target/wasm32-unknown-unknown/release/ 디렉토리에 있습니다. 프로젝트.

$ cd target/wasm32-unknown-unknown/release
$ export MASTER_ACCOUNT=statusmessage.testnet
$ near create-account contract01.$MASTER_ACCOUNT
                          --initialBalance 10
                          --masterAccount $MASTER_ACCOUNT
Account contract01.statusmessage.testnet for network "testnet" was created.

동시에 계약 배포를 위해 statusmessage.testnet에 대한 contract01.statusmessage.testnet이라는 하위 계정을 만들 수 있습니다.

$ near deploy --accountId contract01.$MASTER_ACCOUNT \
                        --wasmFile status_message.wasm

그런 다음 near deploy 명령을 사용하여 계약을 배포할 수 있습니다.

Starting deployment. Account id: contract01.statusmessage.testnet, node: [https://rpc.testnet.near.org](https://rpc.testnet.near.org), helper: [https://helper.testnet.near.org](https://helper.testnet.near.org), file: status_message.wasm
Transaction Id 4oDYA8wPLJuKwDumJxEGubeJBA9Ep13MLXSf34q9ydRm
To see the transaction in the transaction explorer, please open this url in your browser[https://explorer.testnet.near.org/transactions/4oDYA8wPLJuKwDumJxEGubeJBA9Ep13MLXSf34q9ydRm](https://explorer.testnet.near.org/transactions/4oDYA8wPLJuKwDumJxEGubeJBA9Ep13MLXSf34q9ydRm) Done deploying to contract01.statusmessage.testnet

계약 배포가 성공하면 다음 정보를 얻을 수 있습니다.

3.5 컨트랙트 기능 호출

$ near call --accountId $MASTER_ACCOUNT \
      contract01.$MASTER\_ACCOUNT set\_status '{"message":"Hi!2021"}'

계약을 TestNet에 성공적으로 배포하면 계약을 배포한 계정 contract01.statusmessage.testnet이 계약의 주소입니다. TestNet의 StatusMessage 계약이 정상적으로 실행될 수 있는지 확인합니다. 계약의 기본 제공 속성을 설정하기 위해 set_status를 호출할 수 있습니다.

Scheduling a call: contract01.statusmessage.testnet.set_status({"message":"Hi!2021"})
TransactTransaction Id E9dsw8H9ztDN18DDvXKTBPvBLWHew7TtuWsLgg6uvesN
To see the transaction in the transaction explorer, please open this url in your browser[https://explorer.testnet.near.org/transactions/E9dsw8H9ztDN18DDvXKTBPvBLWHew7TtuWsLgg6uvesN](https://explorer.testnet.near.org/transactions/E9dsw8H9ztDN18DDvXKTBPvBLWHew7TtuWsLgg6uvesN) ''

다음은 컨트랙트에서 set_status 함수를 호출하여 반환되는 정보입니다.

StatusMessage 계약 함수 호출 트랜잭션이 정상적으로 실행될 수 있고 특정 트랜잭션 ID가 반환되는 것을 볼 수 있습니다. 즉 E9dsw8H9ztDN18DDvXKTBPvBLWHew7TtuWsLgg6uvesN

3.6 거래조회

NEAR는 커뮤니티에 데이터 탐색 쿼리 플랫폼인 NEAR Explorer를 제공합니다. 사용자는 플랫폼의 지정된 네트워크에서 계정 ID, 트랜잭션 해시 및 트랜잭션 블록과 같은 실시간 온체인 정보를 검색할 수 있습니다.https://explorer.testnet.near.org/transactions/E9dsw8H9ztDN18DDvXKTBPvBLWHew7TtuWsLgg6uvesN

트랜잭션 ID를 사용하여 NEAR 탐색기에서 특정 트랜잭션 세부 정보를 쿼리합니다.

이 문제의 요약 및 미리 보기

BlockSec
作者文库