트랜잭션 서버 배포
사용자에게 수수료 없는 트랜잭션을 제공합니다
그 transactions-server 는 거래를 전달하는 프록시 서버입니다 Gelato. 이 서버는 클라이언트로부터 서명된 거래를 받아, 내부적으로 해당 거래를 적절한 네트워크로 전송합니다. 이를 통해 서버 소유자는 사용자에게 수수료 없는 거래를 제공할 수 있습니다
트랜잭션 서버는 여러 네트워크를 사용하는 UX를 개선하고, 사용자가 즉석에서 네트워크 제공자를 전환하지 않도록 돕기 위해 사용됩니다. 사용자는 계속해서 Ethereum 에 연결된 상태를 유지하면서 폴리곤 거래에 서명하는 것만으로 상호작용할 수 있습니다
Decentraland DAO는 우리 dapp에서 사용하는 서버를 설정했으며, 몇 가지 제한. 이 문서는 여러분이 어떻게 이 서버를 배포하여 필요하다면 필요한 제한과 함께 사용자가 거래를 릴레이할 수 있도록 할 수 있는지 설명합니다.
제한
모든 제한은 사용자가 전송하려는 거래 단위로 적용됩니다. 실제로는 서버로의 POST 요청으로 해석됩니다.
서버에 설정할 수 있는 제한은 다음과 같습니다:
하루 최대 거래 수 할당량을 확인합니다. 다음을 참조하세요 컬렉션 섹션 을 참조하세요.
허용 목록에 있는 컨트랙트를 확인합니다. 따라서 거래가 인식되지 않는 컨트랙트와 상호작용하려 하면 실패합니다. 이를 위해 다음을 사용합니다
배포된 컨트랙트와 컬렉션. 다음을 참조하세요 컨트랙트와 컬렉션 섹션 자세한 정보
판매 가격을 확인하여 임계값보다 낮으면 제한합니다. 다음을 참조하세요 최소 판매 금액 섹션 자세한 정보
Gelato 설정하기
Gelato 는 멀티체인 릴레이어 프로토콜입니다. 우리는 수수료 없는 거래를 가능하게 하기 위해 이 인프라를 사용합니다. 이는 실제로 거래를 전송하려고 할 때 메시지에 서명해서 Gelato로 보내는 것을 의미합니다. 이 서비스가 대신 거래를 전송하고, 응답(트랜잭션 해시)을 돌려줍니다.
거래를 전달할 컨트랙트가 필요하지만, 다행히 Decentraland에서 사용 중인 것을 재사용할 수 있습니다(아래 참조).
Gelato 서버용 API로 동작합니다. 설정하려면 먼저 API KEY가 필요하며, 우리는 나중에 사용할 것입니다. 이를 얻으려면:
서비스에 등록하세요
타깃으로 삼을 네트워크에 대해 새 dapp을 생성하세요. Decentraland 설정을 모방하려면:
다음
메인넷옵션적절한
앱 이름을 dApp에 설정하세요선택하고
폴리곤을 네트워크로스마트 컨트랙트다음을 활성화하세요
모든 컨트랙트토글 옵션을
에서 API KEY를 복사하세요
API 키섹션
마지막으로, 새로 만든 dapp에 자금을 충전해야 합니다. 왼쪽 사이드바의 1Balance 섹션에서 지갑을 연결하면 됩니다. 연결되면 USDC 를 입금하여 사용자가 전송할 거래의 비용을 충당할 수 있습니다. MATIC이 필요하다면 이 게시물.
테스트넷
실서비스 전 앱을 테스트하고 싶고 Polygon을 사용 중이라면 다음에서 가능합니다 Polygon Amoy, Polygon 테스트넷입니다.
이를 위해 단순히 과정을 반복하되 Matic Testnet (Amoy) 을 네트워크 필드에서 선택하세요.
dapp에 자금을 충전해야 하지만, 다음에서 Sepolia ETH 토큰을 받아 쉽게 할 수 있습니다 파우셋.
트랜잭션 서버 다운로드
먼저 Decentraland의 transactions-server 코드 사본이 필요합니다. 이것은 github에서찾을 수 있습니다. 거기서 두 가지 방법이 있습니다:
코드 다운로드: 코드를 다운로드하려면 먼저 초록색
코드버튼을 클릭한 다음, 아래 중 하나를 선택하세요
클릭하세요
Download ZIP아래의 URL을 복사하세요
복제제목을 복사한 뒤 다음을 실행하세요$ git clone THE_URL_HERE
코드 포크하기:
fork버튼을 페이지 오른쪽 상단에서 클릭할 수 있습니다. 프로세스가 완료되면 첫 번째 옵션에서 하듯이 같은 방법으로 코드를 다운로드할 수 있습니다. 이를 위해 Github 계정이 필요하며, 저장소 포크에 대한 자세한 정보는 여기
서버 설정하기
트랜잭션 서버는 NodeJS 를 사용하여 Typescript로 작성되었습니다. 실행하기 전에 몇 가지 환경 변수를 설정해야 합니다.
방법은 다음과 같습니다:
다음을 복사하여
.env.defaults파일을 복사하여 이름을 바꾼 뒤.env다음을 여세요
.env파일로 붙여넣으세요. 기본값이 설정된 변수들이 보일 것입니다. 예를 들어HTTP_SERVER_PORT=5000(서버를 실행할 포트)
Gelato
Gelato 설정 시 얻은 API KEY를 사용하세요 gelato 설정하기.
거래
새 거래 요청이 도착하면 주소 가 그날 전송한 금액을 확인합니다. 설정한 값보다 높으면 거래는 실패합니다.
이 확인을 완전히 제거하려면 코드로 들어가 다음을 삭제할 수 있습니다
메서드를 async function checkData(transactionData: TransactionData): Promise<void> { 로 src/ports/transaction/component.ts
컨트랙트와 컬렉션
서버는 컨트랙트 주소 URL을 가져와 로컬에 저장하고 서브그래프를 조회합니다. 새 거래 요청이 도착하면 거래가 상호작용하는 컨트랙트가 URL의 배포된 컨트랙트 또는 서브그래프의 배포된 컬렉션에 속하는지 확인합니다.
자체 컨트랙트를 사용하려면 URL을 변경하되 현재 https://contracts.decentraland.org/addresses.json 과 동일한 구조를 유지하세요. 사용되는 네트워크는 COLLECTIONS_CHAIN_ID로 결정되며, 캐시를 다시 가져오는 간격은 COLLECTIONS_FETCH_INTERVAL_MS입니다.
자체 컬렉션이 있다면 서브그래프 URL도 변경할 수 있습니다.
이 확인을 완전히 제거하려면 코드로 들어가 다음을 삭제할 수 있습니다
메서드를 async function checkData(transactionData: TransactionData): Promise<void> { 로 src/ports/transaction/component.ts
최소 판매 금액
새 거래 요청이 도착하면 먼저 릴레이하려는 데이터를 파싱합니다. 판매(마켓플레이스 구매, 입찰 등)를 감지하면 값을 MIN_SALE_VALUE_IN_WEI와 비교합니다. 더 낮으면 거래는 실패합니다.
관련 판매 메서드를 확인하려면 다음을 볼 수 있습니다 src/ports/transaction/validation/checkSalePrice.ts 그리고 이 확인을 완전히 제거하려면 코드로 들어가 다음을 삭제할 수 있습니다
메서드를 async function checkData(transactionData: TransactionData): Promise<void> { 로 src/ports/transaction/component.ts
서버 실행하기
이제 모든 설정이 완료되었으니, 남은 것은 실제로 서버를 실행하는 일입니다. 다음을 따라 할 수 있습니다 README 를 참고하되, 요약하면 다음이 필요합니다:
설치되어 NodeJS 있어야 합니다
원하는 터미널을 여세요
다음 명령을 실행하세요:
물론 이것을 다음과 같은 원하는 서비스에 배포하고 싶을 것입니다 AWS 예를 들어. 프로젝트의 Dockerfile 을 사용하면 됩니다.
서버 사용하기
이제 모든 것이 설정되고 실행되었으니, 실제로 서버를 사용할 시간입니다.
실제로 거래를 보내려면 다음으로 POST 요청을 해야 합니다 /transactions. 요청에 필요한 스키마는 다음에서 정의됩니다 transactionSchema 에서 src/ports/transaction/types.ts.
대신, 미리 만들어진 라이브러리를 사용해 더 쉽게 작업하고 싶다면 다음을 시도해 볼 수 있습니다 decentraland-transactions. 이는 다음을 통해 사용됩니다 decentraland-dapps 우리 dapp들에서 사용되며, 예를 들어 마켓플레이스, 유틸리티와 함께 sendTransaction. 다음을 확인하세요 이 코드 예시로.
마지막 업데이트