ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 솔라나 최신 버젼, Rustc 빌드 문제 해결 과정 [ TIL / Solana ]
    블록체인 공부/솔라나 2023. 9. 7. 01:40

    문제상황

    Rust 스터디를 하는 중, 스마트 컨트랙트를 러스트 기반으로 코드를 작성하는 곳에서 공부한 rust를 활용하여 간단한 프로그램을 만들어보려고 했다. Rust 컨트랙트 작성을 지원하는 여러 체인이 있지만, 그 중에서 솔라나가 채택되어서 개발을 진행해보기로 했다.

    많은 다른 체인들도 그렇지만, 솔라나 또한 solana-cli라고 컨트랙트를 작성하고 배포하는 데 필요한 툴들을 직접 제공하고 있다. 이를 통해서 로컬 환경에서 컨트랙트를 배포하고 작동시키는 작은 블록체인 서버도 만들 수 있다. 본인은 솔라나 측에서 제공하는 공식 문서의 시작하기를 참고하면서 간단하게 hello_solana 컨트랙트를 만들어 배포해보려고 했다. 참고로 솔라나에서는 컨트랙트를 프로그램으로 지칭하기 때문에 아래에서는 프로그램이라는 명칭을 사용하도록 하겠다.

    solana-cli에서 제공하는 여러 툴 중 cargo-build-bpf를 이용해서 프로그램을 빌드하게 된다. 하지만 필자는 위와 같은 에러를 맞닥뜨렸다. 바로 빌드하는 rustc의 버젼이 최신의 solana-program 라이브러리를 빌드할 수 있는 버젼보다 하위버젼이라는 문제였다.

    해결과정

    하지만 필자는 이전에도 다른 체인에서 rust를 이용하여 스마트 컨트랙트를 작성한 바 있기 때문에 rust 또한 최신으로 유지하고 있다는 것을 알고 있었다.

    필자의 mac에 설치된 rustcsolana-program이 요구하는 버젼보다 높다는 것을 확인한 이후에는 어째서 프로그램을 빌드할 때 1.62.0-dev버젼으로 실행이 되는지 확인을 해야했다. 알고보니 solana-cli는 자체적으로 러스트 툴체인을 가지고 있다는 것을 확인했다. 솔라나 공식문서에서도 만약 최신의 solana-program 라이브러리를 사용해서 버젼 불일치 문제가 생겼을 때는 직접 러스트 환경을 만들어줘야 한다고 언급하고 있다.

    러스트 툴체인은 러스트 빌드 환경을 자체적으로 만들어 사용하는 것을 말한다.

    해결

    1. solana-program 버젼 낮추기
      동일한 문제들을 겪고 있는 개발자들이 이 방식을 이용해서 일단 프로그램 작성을 진행하는 듯 하다. 하지만 solana-program 라이브러리의 버전 업은 이전 버전에서 발생하는 문제들을 해결하기 위해 만들어졌을 것이다. 그렇다면 언젠가는 solana-cli에서 제공하는 러스트 툴체인에서 벗어나야할텐데 위와 같은 방식은 미봉책일 뿐이라고 생각한다.
    1. 직접 binary를 빌드해서 실행환경 만들기
      필자 같은 경우는 binary를 빌드하는 과정에서도 많은 문제들과, 또 빌드 시간이 너무 오래걸린 다는 단점이 있어서 시도하다가 포기했다.
      거기에는 rustdocmanifest가 없다고 하는 에러도 있었는데 혹시 이 문제를 해결할 수 있는 분이 있다면 댓글로 남겨줬으면 한다.
    2. Symbolic Link를 본인의 rustc 실행 환경을 향하게 하기
      필자 같은 경우는 solana-cli가 설치된 파일로 들어가 rust가 어떻게 작동하는지 살펴봤다. solana-cli가 설치된 경로는 다음과 같다.여기에서 타고타고 들어가면 bpf-toolssbf-tools로 향하게 된다. 두 폴더 모두 rust 파일을 빌드하기 위해서 핵심적인 컴포넌트들로만 이루어져 있는 러스트 툴체인 폴더다. 필자는 거기서 rust라는 폴더를 필자의 mac에 설치되어있는 rustc 실행 환경을 가리키게 symbolic link를 만들어보았다.본인의 rust 실행 환경의 경로는 보통 mac에서는 /usr/local/Cellar/rust에 있다. 이후 다시 솔라나 프로그램을 빌드해보니 제대로 처리되는 것을 확인할 수 있었다.
    3. ln -s [본인 러스트 파일 경로] rust
    4. ~/.local/share/solana
Designed by Tistory.