Java 스마트 컨트랙트는 neow3j devpack을 통해 가능합니다. 이는 스마트 컨트랙트 라이브러리, 컴파일러, 테스트 프레임워크를 제공합니다. Neow3j는 빌드 도구로 Gradle을 선호합니다. Gradle 태스크를 통해 컨트랙트 컴파일을 가능하게 하는 Gradle 플러그인을 제공합니다.
Java
Java에서 스마트 컨트랙트 개발을 위해서는 최소 버전 8 이상의 Java SDK가 필요합니다. Java OpenJDK 다운로드는 Adoptium을 확인하세요.
Docker
neow3j로 자동화된 스마트 컨트랙트 테스트를 실행하려면 Docker가 설치되어 있어야 합니다.
어떤 에디터에서든 스마트 컨트랙트를 작성할 수 있지만, IntelliJ IDEA와 Visual Studio Code를 사용하는 것을 권장합니다. IntelliJ는 최고의 Java/Kotlin 개발자 경험을 제공하고, VS Code는 Neo에서의 개발을 위한 강력한 확장을 제공합니다.
VS Code를 사용한다면 Neo Blockchain Toolkit 확장을 설치해야 합니다. 이는 컨트랙트 디버깅, 프라이빗 블록체인 쉬운 설정, 에디터 내 블록 탐색기를 지원합니다. VS Code에서 최적의 Java 지원을 위해 Java Extension Pack을 사용하는 것을 권장합니다.
스마트 컨트랙트 프로젝트를 빠르게 설정하려면 neow3j-boilerplate-contracts 저장소의 템플릿 프로젝트를 사용할 수 있습니다. 이는 간단한 "HelloWorld" 스마트 컨트랙트를 포함하고 있습니다.
GitHub 내에서 Use this template을 클릭하여 자신의 저장소를 만들거나, 다음 명령어로 클론할 수 있습니다:
git clone https://github.com/neow3j/neow3j-boilerplate-contracts.git
cd neow3j-boilerplate-contracts && git checkout -b devportal-quickstart-tutorial
:::note
이 튜토리얼은 devportal-quickstart-tutorial 브랜치를 기반으로 하며, main 브랜치와 같은 커밋이 아닐 수 있습니다.
:::
위의 설정으로 HelloWorld 컨트랙트를 이미 컴파일할 수 있습니다. 프로젝트의 루트 디렉토리에서 터미널을 열고 다음을 실행하세요:
./gradlew neow3jCompile
이것은 스마트 컨트랙트 클래스 HelloWorldSmartContract를 컴파일하고, 기본적으로 build/neow3j에 NEF 파일, 컨트랙트 매니페스트, 디버깅 정보 파일을 배치합니다. NEF 파일과 컨트랙트 매니페스트는 여기에 설명되어 있습니다. 이들은 온체인에 배포되는 아티팩트입니다. 디버깅 정보 파일은 Neo 디버거(Neo Blockchain Toolkit의 일부)가 컨트랙트를 디버깅하는 데 필요합니다.
neow3j 컴파일러는 Java 코드에서도 호출할 수 있습니다. 이는 Java 코드를 사용하여 컨트랙트를 배포하고 동일한 코드에서 컨트랙트를 컴파일하고 싶을 때 실용적입니다.
보일러플레이트 프로젝트에서 컴파일러 사용 예제 com.axlabs.helloworld.Deployment를 찾을 수 있습니다.
CompilationUnit res = new Compiler().compile(HelloWorldSmartContract.class.getCanonicalName());
컴파일 결과는 NEF 파일과 컨트랙트 매니페스트에 대한 액세스를 제공하는 CompilationUnit입니다. 이들은 Neo 블록체인의 네이티브 컨트랙트인 ContractManagement 컨트랙트를 호출하는 데 사용됩니다.
TransactionBuilder builder = new ContractManagement(neow3j)
.deploy(res.getNefFile(), res.getManifest(), hash160(owner))
.signers(signer);
NeoVM용 Java 이해하기
neow3j를 사용하여 스마트 컨트랙트를 구현할 때, 어느 시점에서는 일반 Java와 스마트 컨트랙트용 Java의 차이점을 이해해야 합니다. 스마트 컨트랙트 코드는 JavaVM이 아닌 NeoVM에서 실행되기 때문에 여러 제한사항이 있습니다. 이에 대한 내용은 여기에서 읽을 수 있습니다.
neow3j Devpack 이해하기
neow3j devpack 라이브러리를 알아보려면 여기의 문서를 참조할 수 있습니다. 이는 스토리지, 이벤트, 네이티브 컨트랙트와 같은 Neo 스마트 컨트랙트 API의 핵심 기능을 보여주고, neow3j에서 어떻게 사용할 수 있는지 설명합니다. 또는 개발자 포털의 다른 neow3j 튜토리얼 중 하나를 확인하여 Java 스마트 컨트랙트가 어떻게 생겼는지 더 잘 이해할 수 있습니다.
자동화된 테스트
스마트 컨트랙트를 작성할 때 테스트는 코드에 대한 자신감을 갖는 데 매우 중요합니다. Neow3j는 JUnit 5를 기반으로 구축된 테스트 프레임워크를 제공합니다. 이는 여기에 문서화되어 있습니다. 보일러플레이트 저장소의 테스트 클래스 HelloWorldSmartContractTest는 neow3j로 컨트랙트 테스트가 어떻게 생겼는지 첫인상을 제공합니다.
수동 테스트
Neo 메인넷에 컨트랙트를 배포하기 전에, 머신의 프라이빗 네트워크에서 테스트한 다음 테스트넷에서 테스트하고 싶을 것입니다. 로컬 테스트를 위해 개발 환경 섹션에서 언급한 Neo Blockchain Toolkit을 사용하는 것을 권장합니다. 보일러플레이트 저장소에는 이미 Alice라는 하나의 계정이 있는 프라이빗 네트워크를 정의하는 default.neo-express 설정 파일이 포함되어 있습니다. VS Code에서 명령 팔레트를 열고 "Start blockchain"을 입력하세요. 명령을 실행하세요. 프라이빗 네트워크가 시작됩니다. 다시 명령 팔레트에서 "Transfer assets"를 입력하고 명령을 실행하세요. 제네시스에서 Alice에게 100 GAS를 전송하세요. 이는 프라이빗 네트워크에서 트랜잭션을 생성할 것입니다. 이제 보일러플레이트 저장소의 com.axlabs.helloworld.Deployment에서 main 메서드를 실행하여 프라이빗 네트워크에 컨트랙트를 배포할 수 있습니다.
:::tip
프라이빗 네트워크 실행에 사용되는 기본 도구는 Neo-Express입니다. 여기에서 별도로 설치하고 명령줄 도구로 사용할 수 있습니다.
:::