수수료 위임
앞서 말한 것처럼 수수료 위임을 사용하면 사용자가 가스를 지불하지 않고도 Injective와 상호작용(트랜잭션 제출)할 수 있습니다. 모든 Cosmos-SDK 기반 체인의 _트랜잭션 라이프사이클_의 일부로 서명 검증, 가스 계산 및 수수료 공제를 수행하는AnteHandler가 있습니다.
알아야 할 몇 가지 사항이 있습니다:
- 트랜잭션에는 여러 서명자가 있을 수 있습니다(즉, 트랜잭션에 여러 서명을 포함할 수 있음).
- 트랜잭션의 가스 수수료는
authInfo.fee.feePayer값에서 공제되며feePayer에 대해 검증되는 서명은 트랜잭션의 서명 목록 내 첫 번째 서명입니다(참조). - 나머지 서명은 트랜잭션의 실제 발신자에 대해 검증됩니다.
privateKey의 주소를 feePayer로 포함하고, Injective와 상호작용하려는 privateKey를 사용하여 이 트랜잭션에 서명한 다음 해당 트랜잭션을 브로드캐스트해야 합니다.
Web3Gateway API
모든 사람이 Web3Gateway 마이크로서비스를 실행하고 사용자에게 수수료 위임 서비스를 제공할 수 있습니다. 예를 들어 Injective 위에 거래소 dApp을 구축하는 개발자는 이 마이크로서비스를 실행하여 트레이더에게 가스가 없는 거래 환경을 제공할 수 있습니다. 이 마이크로서비스는 두 가지 핵심 메서드를 포함하는 API를 노출합니다:PrepareTx(및PrepareCosmosTx)BroadcastTx(및BroadcastCosmosTx)
PrepareTx
PrepareTx 메서드는 사용자가 실행하려는 트랜잭션에 대한 컨텍스트(chainId, signerAddress, timeoutHeight 등)를 포함하는 메시지를 받아들이고, EIP712 타입 데이터 내에 서명을 포함한 특정 메시지의 EIP712 타입 데이터를 반환합니다. 이 EIP712 타입 데이터를 사용하여 Ethereum 네이티브 지갑으로 서명하고 Injective와 상호작용하려는 사용자의 서명을 얻을 수 있습니다.
EIP712 타입 데이터는 PrepareTx 메서드에 전달하는 메시지의 proto 정의에서 생성됩니다.
BroadcastTx
BroadcastTx 메서드는 트랜잭션을 노드에 브로드캐스트하는 역할을 합니다. PrepareTx API 호출의 전체 응답과 함께 EIP712 타입 데이터의 서명을 전달합니다. 그런 다음 BroadcastTx는 메시지를 네이티브 Cosmos 트랜잭션으로 패킹하고 트랜잭션(컨텍스트 포함)을 준비한 다음 Injective에 브로드캐스트합니다. 결과적으로 트랜잭션 해시가 사용자에게 반환됩니다.
Prepare/BroadcastCosmosTx
위의 메서드는 EIP712 트랜잭션 표현에 서명하므로 Ethereum 네이티브 지갑을 사용하여 트랜잭션에 서명하고 브로드캐스트할 때 사용됩니다. Web3Gateway를 사용하여 Cosmos 네이티브 지갑에서 수수료 위임을 지원하려면 PrepareCosmosTx 호출을 생략하거나(또는 Web3Gateway 서명자의publicKey가 필요한 경우 호출하고), 클라이언트 측에서 트랜잭션을 준비하고, Cosmos 지갑을 사용하여 서명한 다음, BroadcastCosmosTx 메서드를 사용하여 브로드캐스트할 수 있습니다.
이 방법은 TxRaw의 authInfo 객체에 Web3Gateway 서명자의 publicKey를 추가한 다음 브로드캐스트할 때 API 측에서 privateKey를 사용하여 트랜잭션에 서명합니다.
이전 EIP712 접근 방식과의 차이점은 EIP712를 생성할 때 미리
Web3Gateway 서명자를 사용하여 트랜잭션에 서명해야 한다는 것입니다. 즉, PrepareTx를 사용해야 하며 클라이언트 측에서 트랜잭션을 생성할 수 없습니다.