Solana Web3.js는 올해 11월 공식적으로 버전 2.x를 출시한 매우 기능이 풍부한 JavaScript 라이브러리입니다. 1.x와 비교하여 새 버전은 많이 변경되었습니다. 이 기사에서는 몇 가지 주요 변경 사항을 요약하려고 합니다.
현재는 2.x 버전이 출시된 지 얼마 되지 않아 활용도가 높지 않고, 활용도가 높은 라이브러리도 많이 전환되지 않았습니다. 하지만 먼저 이를 이해하고 향후 마이그레이션을 준비할 수 있습니다.
버전 비교
이전 버전이 실제로 사용하기 더 쉽다는 점을 인정해야 합니다. 첫째, 이전 버전에는 실제로 @solana/web3.js라는 하나의 패키지만 있었고 모든 것이 그 안에 있었습니다. 그리고 이는 클래스를 기반으로 하며 일반적으로 사용되는 많은 작업을 캡슐화합니다. 예를 들어 Connection 클래스에는 기본적으로 개발자가 원하는 기능을 다루는 수십 개의 메서드가 있습니다. 그리고 솔라나 쿡북은 수많은 샘플 코드를 제공하므로 개발자는 여기에서 언제든지 필요한 것을 찾을 수 있습니다.
그러나 이로 인해 다른 문제도 발생합니다. 개발자가 실제로 사용하는 기능은 그 중 극히 일부에 불과하지만 결국에는 전체 코드 베이스가 사용자 장치에 다운로드됩니다. 전체 라이브러리의 코드 크기가 크기 때문에 시간이 걸릴 수 있습니다.
버전 2.x를 되돌아보면 공식 팀은 원본 코드 베이스를 @solana/accounts, @solana/codecs, @solana/rpc, @solana/signers, @solana/transactions wait와 같은 여러 개의 작은 모듈로 분할했습니다. 그리고 클래스 기반 구현을 버리고 더 많은 단일 기능을 사용하므로 JavaScript 코드 구성을 최적화하는 데 매우 유용합니다. DApp에서 사용하지 않는 코드는 삭제되며 실제로 사용자 장치에 다운로드되지 않습니다. 공식 문서의 통계에 따르면 새 버전의 DApp을 사용하면 기본적으로 30%의 크기 최적화를 달성할 수 있습니다. 일부 기능만 사용하면 더 높은 최적화 비율을 달성할 수 있습니다( https://solana-labs.github. io/solana-web3.js/#statistics ).
이를 통해 솔라나 팀의 문서화 수준에 대한 테스트가 이루어졌습니다. 개발자가 필요한 기능을 어떻게 빠르게 찾을 수 있는지가 중요한 문제가 될 것입니다. 하지만 지금으로서는 적어도 패키지 이름은 좋은 의미를 갖고 있는 것으로 보이며, 이름을 보면 대략적으로 어떤 용도로 사용할 수 있는지 알 수 있습니다. 이는 개발자의 마이그레이션 어려움을 어느 정도 줄여줄 것입니다.
물론, 출시된 지 얼마 되지 않았기 때문에 아직 마이그레이션되지 않은 프로젝트도 많습니다. Solana Cookbook에는 2.x 버전에 대한 예제도 더 적습니다. 그리고 새 버전은 기본 제공 런타임 기능(예: 키 쌍 생성)을 사용하는 경향이 있기 때문에 여기에 설명이 문서에 누락되어 개발자가 일부 위치에서 다소 혼란스러워 합니다.
2.x에는 종속성이 전혀 없다는 매우 중요한 기능도 있습니다. 이는 많은 사용자에게 중요하지 않을 수 있지만 올해 12월 초 @solana/web3.js 버전 1.95.5 및 1.95.6에서 발생한 공급망 공격으로 판단하면 더 많은 외부 입력 및 종속성이 빠르게 증가할 가능성이 있습니다. 보안 사고. 버전 2.x가 출시되면서 Web3.js 개발 팀은 더 많은 기본 기능을 사용하고 외부 종속성 및 Polyfill 도입을 취소하기로 결정했습니다. 이는 향후 변경될 수 있지만 적어도 현재로서는 2.x 버전에서는 모든 외부 종속성을 제거합니다.
중요한 변경 사항
연결하다
위에서 소개한 것처럼 1.x에는 Connection을 통해 제공되는 메소드가 매우 많다. 그러나 가장 중요한 기능은 RPC 요청 주소를 구성하여 요청 보낸 사람을 만드는 것입니다. 그런 다음 이를 통해 다양한 요청을 보내세요.
2.x에서는 보다 기능적인 방식으로 구현되었습니다.
위 코드에서 "sendAndConfirmTransaction"을 호출하여 트랜잭션을 보내면 HTTPS 요청이 자동으로 시작되고 WSS 연결이 설정되며 트랜잭션 상태가 구독되고 트랜잭션이 확인된 후 트랜잭션 해시가 반환됩니다. .
키 쌍
공개 키와 개인 키가 관련된 부분에도 큰 변화가 있습니다. 버전 1.x에서 가장 일반적으로 사용되는 두 클래스 Keypair 및 PublicKey는 더 이상 존재하지 않으며 일부 기능으로 대체되었습니다.
예를 들어 "await generateKeyPair()"를 사용하여 키 쌍을 생성할 수 있습니다. 이전에는 "Keypair.generate()"를 사용하여 키 쌍을 직접 생성했습니다.
이전처럼 필요한 키 쌍을 직접 반환하는 대신 새로운 generateKeyPair가 Promise를 반환하는 것을 볼 수 있습니다. 이는 JavaScript의 Web Crypto API를 최대한 활용하고 기본 Ed25519 구현을 사용하는 새로운 구현 때문입니다. Web Crypto API의 많은 메서드는 비동기식입니다. 그러나 이러한 변화는 받아들일 수 없는 일이 아닙니다. 2024년이 끝나가는 지금, JavaScript 개발자들은 이미 Promise를 매우 친숙한 친구로 여겼습니다.
거래 보내기
1.x 사용자는 "Transaction"과 "VersionedTransaction"이라는 두 가지 클래스에 대해 잘 알고 있을 것입니다. 제가 솔라나에 대해 처음 알았을 때, 두 클래스 사이의 관계는 저를 매우 혼란스럽게 만들었습니다.
버전 2.x에서는 이 두 클래스도 더 이상 사용할 수 없습니다.
이전 버전에서 제공되던 시스템 프로그램 관련 메소드는 더 이상 존재하지 않으므로 "SystemProgram" 클래스의 정적 메소드를 다른 곳에서 가져와야 합니다.
예를 들어, "transfer" 명령은 "@solana-program/system"에서 "getTransferSolInstruction" 함수를 호출해야 합니다.
클래스가 더 이상 제공되지 않으므로 Web3.js는 함수형 프로그래밍 기능에 일반적으로 사용되는 "파이프" 형식을 제공합니다. 다음은 파이프 기능을 사용하여 원래 1.x 전송 기능을 구현합니다.
트랜잭션은 더 이상 Connection을 통해 시작되지 않고 고유한 함수를 생성한 다음 해당 함수를 호출하여 트랜잭션을 시작하는 정의한 RPC 공급자를 통해 시작되는 것을 확인할 수 있습니다. 버전 1.x에 비해 코드량이 다소 늘어났지만, 커스터마이징이 가능하다는 점이 장점이다.
HTTPS RPC를 통해 트랜잭션이 시작된 후 WSS RPC를 구독하여 트랜잭션 결과를 확인합니다. 새로운 방법은 WSS에 크게 의존하고 있음을 느낄 수 있으며, 앞으로는 WSS가 더 널리 사용될 것이며 이는 실제로 RPC 제공업체의 서비스 안정성에 대한 더 높은 요구 사항을 제시할 것입니다. 신뢰할 수 있는 WSS 노드 공급자를 찾고 있다면 ZAN Node( https://zan.top/home/node-service?chInfo=ch_WZ )가 좋은 선택입니다. 아시아 태평양 지역 솔라나의 선도적인 서비스 제공자로서 우리는 안정적이고 효율적인 연결 성능을 제공하기 위해 최선을 다하고 있습니다. Ethereum 및 Solana와 같은 인기 있는 체인 외에도 다양한 시나리오의 요구 사항을 충족하기 위해 20개 이상의 주류 체인에 대한 RPC 서비스도 지원합니다.
반응하다
흥미롭게도 @solana/web3.js 프로젝트에는 일부 React Hooks와 signIn과 같은 내장 기능을 제공하는 @solana/react라는 라이브러리도 포함되어 있습니다.
요약
@solana/web3.js 버전 2.x의 출시는 지속적인 개발과 개선에 대한 솔라나 팀의 노력을 완전히 반영합니다. 개발자에게 솔라나 네트워크와 상호 작용할 수 있는 효율적이고 유연하며 사용자 정의 가능한 방법을 제공하고 플랫폼 채택과 성장을 촉진합니다.
이 글은 ZAN팀(X 계정 @zan_team )의 gin-lsl이 작성했습니다.