신규: Helius가 Light Protocol을 인수했습니다
Solana 1.16 업데이트
블로그/업데이트

Solana v1.16 업데이트에 대해 알아야 할 모든 것

Developer Experience EngineerX의 0xIchigoLinkedIn의 0xIchigoGitHub의 0xIchigo
읽는 데 11분

이 글에서는 무엇을 다루나요?

Solana 검증인 네트워크에서 Solana Labs 검증인 클라이언트의 최신 업그레이드인 버전 1.16의 도입률이 성공적으로 압도적 다수에 도달했습니다. 자원봉사자와 카나리아 노드의 헌신적인 노력에 힘입어 철저한 감사를 거쳤으며, 이 이정표는 약 10개월에 걸친 집중적인 개발의 결실입니다.

다음 섹션에서는 v1.16의 테스트 방식과 새로운 기능을 네트워크에 단계적으로 도입하는 프레임워크인 Solana의 기능 게이트 시스템을 살펴봅니다. 이어서 v1.16에 구현된 새로운 기능을 알아보겠습니다.

v1.16은 어떻게 테스트했나요?

v1.16은 지난 몇 달 동안 엄격한 테스트를 거쳤습니다. v1.16 릴리스는 2023년 6월 7일부터 테스트넷에서 실행되었으며 수많은 스트레스 테스트를 통과했습니다. 또한 2023년 8월 23일부터 소수의 자원봉사 노드가 v1.16으로 업데이트했습니다. 이들은 RPC 노드의 느린 시작, 일반 보호 오류 등 여러 문제를 식별하고 해결했습니다. Solana Labs는 메인넷 베타에도 여러 카나리아 노드를 배포했습니다. 실제 환경에서 v1.16 노드의 안정성을 모니터링하기 위해서였습니다. 카나리아 노드의 이전 활동과 진행 상황은 Solana Tech Discord의 #canaries-monitoring 채널에서 확인할 수 있습니다.

엣지 케이스나 드물게 발생하는 경쟁 상태를 포착하기 위해 여러 런타임 퍼저로 부분적으로 무작위화된 트랜잭션을 실행했습니다. 일관된 성능을 확인하기 위해 서로 다른 런타임 버전에서 이 트랜잭션들을 실행했습니다. v1.16은 Halborn의 광범위한 감사도 받았습니다. 감사 보고서는 제공되는 대로 이 저장소에 게시됩니다.

기능 게이트

다음 섹션에서 다룰 일부 기능은 현재 아직 활성화되지 않았다는 점에 유의해야 합니다. 기능은 기능 게이트 시스템을 통해 천천히 출시됩니다. 각 기능은 상대적 우선순위와 다른 네트워크에서 활성화된 순서에 따라 특정 에포크에 활성화됩니다. 지금까지 기능 게이트 활성화 일정은 여기에 나열된 기준에 따라 임시로 결정되었습니다. 기본적으로 게이트는 테스트넷, 개발넷, 메인넷 베타 순으로 활성화해야 합니다. 기능을 활성화하려면 필요한 활성화 키페어를 보유한 엔지니어가 트랜잭션을 전송합니다. 해당 트랜잭션이 처리되면 다음 에포크부터 기능이 활성화됩니다. 성능을 보장하기 위해 네트워크별로 한 번에 하나의 기능 게이트만 활성화합니다. 일부 기능에는 안정성을 관찰하는 기간이 필요할 수 있으며, 이로 인해 우선순위가 낮은 게이트의 활성화가 지연될 수 있습니다.

이 기능 게이트 시스템은 합의를 깨뜨리는 변경 사항 때문에 최신 버전을 실행하는 검증인이 표준 체인에서 포크되어 계속 블록을 생성하는 상황을 방지합니다. 예를 들어 v1.14 검증인은 새로운 v1.16 기능을 인식하지 못하므로 분쟁이 발생하면 네트워크를 중단시킬 수 있습니다. 이번 주 Solana 코드베이스에 병합된 커밋은 합의를 깨뜨리는 모든 변경 사항에 Solana 개선 문서(SIMD)를 작성하도록 권장합니다. 이제 기능 게이트 이슈 템플릿에는 해당 이슈의 SIMD를 요청하는 항목이 포함됩니다. 이를 통해 개발 프로세스를 표준화하고 새로운 변경 사항을 문서화하여 투명성을 높일 수 있습니다.

기밀 전송

Token2022에서 도입된 기밀 전송은 영지식 증명을 사용해 SPL 토큰의 잔액과 트랜잭션 금액을 암호화합니다. 이 기능은 익명성보다 기밀성에 중점을 두어 사용자 개인정보 보호를 강화하는 데 초점을 맞춥니다.

기밀 전송은 암호화된 금액을 수학적으로 연산하기 위해 Twisted ElGamal Encryption을 활용합니다. 전송 검증에는 한 당사자(증명자)가 비밀 자체를 공개하지 않고도 특정 비밀을 알고 있음을 다른 당사자(검증자)에게 입증할 수 있는 특수한 영지식 증명인 시그마 프로토콜을 사용합니다. 기밀 전송의 세부 내용을 더 자세히 알아보려면 Token2022란 무엇인가요?를 읽어보세요.

기밀 전송 출시에 맞춰 추가된 유용한 기능은 Command Line Interface (CLI) 지원입니다. create-token 명령에 --enable-confidential-transfers 플래그가 추가되어, 기밀 전송이 활성화된 토큰을 발행할 수 있습니다. 또한 특정 민트의 기밀 전송 구성을 동적으로 변경할 수 있도록 update-confidential-transfer-settings 명령이 추가되었습니다. 이를 통해 감사자 키와 승인 설정을 업데이트할 수 있습니다.

향상된 영지식 증명 런타임 지원

v1.16 릴리스는 영지식 연산, 특히 128비트 타원 곡선 연산에 대한 런타임 지원을 강화해 Solana의 영지식 기능을 개선합니다. v1.16에는 효율적인 증명 생성에 필수적인 alt_bn128 syscall이 도입되었습니다.

alt_bn128은 Barreto-Naehrig 곡선(BN-128)으로 알려진 암호화 연산용 타원 곡선의 특정 구현을 의미합니다. BN-128은 zk-SNARK(영지식 간결 비대화형 지식 증명)를 효율적으로 구현할 수 있는 페어링 친화적 타원 곡선의 한 유형입니다. 참고로 특정 계산을 더 효율적으로 수행할 수 있는 타원 곡선을 ‘페어링 친화적’이라고 합니다. 따라서 BN-128 곡선을 사용하면 영지식 연산과 증명을 훨씬 빠르게 처리할 수 있습니다.

시스템 호출인 syscall은 운영체제 커널에 서비스를 요청할 때 사용합니다. Solana에서 syscall을 사용하면 Solana Virtual Machine(SVM)에서 실행되는 프로그램이 외부 리소스와 상호작용할 수 있습니다.

따라서 alt_bn128 syscall은 Solana 프로그램이 매우 효율적인 BN-128 곡선과 상호작용할 때 사용하는 호출입니다. 영지식 증명 검증을 간소화하여 Solana에서 더 뛰어난 보안 및 개인정보 보호 기능을 제공합니다. 최근에는 Groth16 증명을 압축할 수 있는 alt_bn128 g1 및 g2 syscall도 추가되었습니다. 이러한 증명은 증명당 256바이트의 명령 데이터를 차지하고, 비공개 Solana 프로그램(PSP)은 현재 두 개의 Groth16 증명을 검증해야 하므로 중요합니다. g1 및 g2 압축을 사용하면 증명당 필요한 바이트를 절반인 128바이트로 줄일 수 있어 공간 효율성이 크게 향상됩니다.

또한 Solidity 기반 컨트랙트에 다음과 같은 타원 곡선 연산용 사전 컴파일 컨트랙트 호출이 포함되어 있으면 Solana와의 호환성 문제가 발생합니다.

  • bn256Add - 타원 곡선 연산에서 덧셈을 수행합니다
  • bn256ScalarMult - 타원 곡선 연산에서 스칼라 곱셈을 수행합니다
  • bn256Pairing - 블록 가스 한도 내에서 zkSNARKs 검증을 수행하는 타원 곡선 페어링 연산입니다

이러한 연산은 Ethereum에서 EIP-196, EIP-197, EIP-198를 통해 표준화되었습니다. alt_bn128 syscall 도입은 호환성 격차를 해소하는 중요한 도약입니다. 이제 이러한 타원 곡선 연산에 의존하는 Solidity 컨트랙트는 Solana로 더 쉽게 이전하거나 Solana와 상호 운용할 수 있습니다.

Solana v1.16 업데이트에 alt_bn128 syscall이 포함되면서 영지식 증명을 효율적이고 안전하게 처리하는 Solana의 역량이 크게 향상되었습니다. alt_bn128 syscall에 대해 자세히 알아보려면 다음 풀 리퀘스트를 확인하세요.

검증인

v1.16 업데이트는 검증인의 RAM 사용량을 크게 줄입니다. 이전에는 Solana가 계정 인덱싱에 RAM을 사용했습니다. 이제 기본적으로 디스크에서 계정을 인덱싱하도록 시스템을 재구성해 RAM 사용량을 대폭 줄였습니다. Luganodes의 Yanshu에 따르면 v1.16 릴리스 이후 검증인이 이전 버전의 ~120GB보다 훨씬 적은 ~39GB의 RAM만으로도 원활하게 실행되고 있습니다.

v1.16 릴리스에는 새롭게 설계된 가십 풀 리퀘스트 피어 샘플링 시스템도 도입되었습니다. 이 새로운 시스템은 검증인의 시작 대역폭을 효과적으로 줄입니다. 이전 버전에서는 대량의 가십 풀 리퀘스트로 인해 검증인에 대역폭 제약이 발생할 수 있었습니다. 이로 인해 검증인이 느려지거나 과부하가 발생하기도 했습니다. v1.16은 마지막 요청 이후 경과 시간 변수를 도입해 이 문제를 해결합니다. 이 변수로 유입 트래픽 수준을 측정하고 속도 제한을 적용하여 검증인이 시작할 때 과부하가 발생하지 않도록 합니다.

네트워크보다 뒤처진 스테이킹 검증인은 이제 스테이크에 비례하는 새로운 복구 요청 기능을 통해 현재 상태를 더 빠르게 따라잡을 수 있습니다. 스테이크가 큰 검증인이 네트워크에서 포크되면 복구 요청을 보냅니다. 이 검증인은 큰 스테이크를 보유하고 있으므로 이제 샤드를 더 빠르게 받습니다. 이를 통해 검증인이 네트워크에서 더 이상 포크되지 않고 계속 기여할 수 있습니다. 스테이킹 검증인은 블록을 생성하지 않는 RPC 노드보다 복구 요청 우선순위가 높습니다.

샤드 복구 요청을 보내는 지연 임계값도 100ms에서 200ms로 늘어났습니다. 궁극적으로 Turbine을 통해 제공될 샤드에 대한 복구 요청 수를 줄이기 위한 변경입니다. 참고로 Turbine은 Solana가 원장 항목을 모든 노드에 브로드캐스트하는 데 사용하는 다중 계층 블록 전파 메커니즘입니다. Solana 클러스터는 여러 노드 계층으로 나뉘며, 특정 계층의 각 노드는 데이터를 다음 하위 계층으로 전파합니다. 이 조정은 불필요한 복구 요청을 최소화하고 Turbine의 데이터 전파 효율성을 높인다는 점에서 중요합니다.

자체 검증인을 운영하기가 그 어느 때보다 쉬워졌습니다. 자체 검증인을 운영하려는 분들을 위해 Solana는 YouTube 채널에서 확인할 수 있는 검증인 워크숍 시리즈인 Solana Validator Education을 제공합니다.

크기 조정이 가능한 계정 지원

Solana에 프로그램을 배포할 때 프로그램에 할당되는 공간은 항상 프로그램 크기의 두 배입니다. v1.16에서는 크기를 조정할 수 있는 데이터 계정으로 프로그램을 배포할 수 있습니다. 즉, 더 작은 계정으로 프로그램을 배포한 후 메모리 차액을 지불하고 나중에 크기를 확장할 수 있습니다. 크기 조정이 가능한 계정을 지원하면 Solana에 애플리케이션을 배포하는 개발자가 더 유연하고 효율적으로 리소스를 할당할 수 있습니다.

에포크 계정 해시

이전 버전에서는 블록과 상태 내 모든 계정의 검증에 문제가 있었습니다. 검증인이 특정 계정과 오랫동안 상호작용하지 않으면 해당 계정의 손상된 버전을 보유하고도 이를 인식하지 못할 수 있었습니다. 계정 상태를 변경하는 트랜잭션이 없으면 해당 계정의 상태를 다른 검증인 노드가 보유한 상태와 대조하지 않았기 때문입니다.

v1.16은 에포크 계정 해시를 도입해 이 문제를 해결합니다. 에포크 계정 해시는 상호작용이 없었던 계정까지 포함해 각 에포크가 끝날 때 생성되는 모든 계정의 해시입니다. 네트워크는 에포크 계정 해시를 통해 손상된 데이터를 보유한 노드를 식별하고 포크에서 제외할 수 있으므로 Solana의 무결성과 보안이 향상됩니다.

시스템 튜닝

시스템 튜닝은 최적의 성능을 달성하기 위해 검증인의 운영체제와 하드웨어 구성을 최적화하는 과정입니다. v1.16 릴리스에서는 solana-sys-tuner가 제거되었으며 이제 수동 테스트를 권장합니다. 이전 버전에서는 RocksDB의 TransactionStatus 및 AddressSignature 열이 제대로 정리되지 않았기 때문에 제거되었습니다. 또한 저장 공간을 회수하는 프로세스인 주기적 압축이 기본적으로 비활성화되어 있었습니다. 그 결과 --enable-rpc-transaction-history 플래그를 사용하는 노드에서 이 열들이 무제한으로 커졌습니다. 이제 이 플래그를 사용하는 검증인은 다음 커밋 덕분에 저장 공간을 더 효율적으로 관리할 수 있습니다. 불필요한 트랜잭션 상태와 주소 서명을 저장할 필요가 없어져 검증인의 저장 공간 요구 사항을 간소화하는 중요한 개선입니다.

결론

Solana v1.16 릴리스는 10개월에 걸친 개발의 결실이자 중요한 이정표입니다. 출시가 늦어진 이유는 QUIC에 우선순위를 두었기 때문이며, 기밀 전송, 영지식 지원, 검증인 최적화 개선은 오래 기다려 온 변화입니다. 그럼에도 이번 개선은 획기적입니다. 이번 릴리스를 통해 Solana의 효율성과 개인정보 보호 수준이 한 단계 높아졌습니다.

앞으로 Solana Labs는 약 3개월마다 새 버전을 출시하는 더 민첩한 릴리스 주기로 전환합니다. 향후 릴리스의 규모는 v1.16보다 훨씬 작을 예정입니다. 이를 통해 더 빠르게 반복 개발하고 배포 위험을 줄일 수 있습니다. v1.17 릴리스 일정은 여기에서 확인할 수 있습니다. 더 향상된 영지식 지원과 Posidon syscall 도입 가능성으로 많은 기대를 모으는 또 하나의 릴리스입니다.

익명의 독자 여러분, 여기까지 읽어주셔서 감사합니다! 더 민첩한 릴리스 주기와 다양한 새 기능 및 개선 사항으로 Solana의 미래는 그 어느 때보다 밝습니다. 개발자, 투자자, 검증인, Solana 애호가 모두 향후 릴리스를 계속 지켜봐 주세요. 여러분의 Solana 여정은 이제 막 시작되었습니다.

추가 자료 / 더 읽어보기

‍

Helius 구독하기

최신 Solana 개발 소식을 확인하고 새 게시물 알림을 받아보세요

확대 이미지