거꾸로 타는 보일러로 교체해보자 🥶 (Seaport Protocol로 변경하여 가스비 절감한 건에 대하여)

어떰·2024년 2월 10일
2
post-thumbnail

가스비(Gas Fee)란 뭘까❓

가스비(Gas Fee) 란 블록체인에서 트랜잭션 처리를 위한 비용입니다. 보통 연산이나 데이터를 쓰는 작업을 할 때 발생합니다.

예를 들어, 이더리움 체인의 NFT 마켓 플레이스에서 어떤 NFT에 대한 거래가 발생했다고 해볼게요. 거래가 발생했다는 것은 어떤 조건이 충족되어 컨트랙트가 실행되어 트랜잭션이 발생했다는 것인데, 이 과정에서 검증을 하며 연산작업이 들어갑니다.

NFT의 소유주가 구매자로 변경되고, 구매자의 암호화폐 지갑에서 판매자의 암호화폐 지갑으로 화폐가 전송됩니다. 이런 과정들은 모두 블록에 새로운 거래 데이터를 저장하는 작업들인데, 이때 블록체인 네트워크의 거래 검증자의 연산 작업이 필요하고, 연산 작업에 참여한 채굴자의 노동(거래 검증)에 대한 보상으로 가스비가 발생합니다.

그리고 가스비는 심지어 거래 데이터와 네트워크 환경에 따라 실시간으로 변경됩니다. 거래 당시 이더리움 체인의 연산작업이 많다면 가스비는 그만큼 높게 측정됩니다. 2만원에 그림을 구매하려고 했는데 가스비가 1만원이라 총 3만원에 구매해야 한다면...😱

그렇다면, 마켓에서 NFT 거래를 할 때 최대한 블록체인에서 데이터를 생성하는 작업이 적어야 사용자의 가스비를 아낄 수 있습니다.

무슨 문제가 있었을까❓

Wyvern Protocol오픈소스 스마트 컨트랙트 프로토콜로, 탈중앙화된 거래와 마켓플레이스에 사용될 수 있도록 설계되었습니다. 세계에서 가장 큰 NFT 마켓플레이스 중 하나인 오픈씨(Opensea)도 처음에는 이 Wyvern Protocol을 사용하여 초기 NFT 거래 인프라를 구축했습니다.

그리고 우리의 NFT 마켓 플레이스도 NFT 마켓의 핵심 기능인 마켓 컨트랙트를 Wyvern Protocol를 사용하여 구현되었습니다. Wyvern Protocol은 다양한 유형의 디지털 자산 거래를 지원하고 커스터마이징이 가능해서 다양한 거래 유형과 복잡한 거래 로직을 구현할 수 있습니다. 초기에는 이러한 유연성을 이점으로 보았고 추후 거래 기능의 고도화 작업에서 이 유연성을 이용해보고자 했습니다. 커스텀하여 가스비 절감하는 로직도 추가하고 다양한 거래 형태를 구현해보기도 하는 등을 목표로 하고 있었습니다.

이대로 목표한대로 흘러갔다면...? 😭 하지만 우리네 인생 그렇게 쉽지 않죠 ❗️

우리가 만들고자 하는 프로덕트가 기존의 NFT 마켓 플레이스였다면, 우리의 목표가 아주 기깔나는 NFT 마켓 플레이스를 만들어서 최고로 만들어야겠다 였다면, 아마 그 무엇보다도 거래 기능 고도화가 우선시 되었을 것입니다. 오픈씨에서 트레이딩을 하는 사용자들에게 보다 나은 환경을 만들어줘서 우리 마켓에서 거래를 하도록 하는게 목표였다면 말이죠.

하지만 저희는 대중화가 목표였습니다. 트레이딩에만 초점을 맞춘다기보다는 우선 현실 세계로 가져오고 싶었어요. 실제로 눈에 보이는 가치(혜택 혹은 기능)을 가진 NFT들을 선보이는거죠. 이 기술로 현실의 문제를 일부 해결하기도 하면서요. 그리고 심지어 사용자들은 이게 NFT라는 것을 굳이 몰라도 된다고 생각했습니다. 그저 현실의 어떤 문제를 해결하기 위해 혹은 어떤 경험을 만들어내기 위해 내부적으로 블록체인 기술을 사용한 것이니까요.(그러면서도 트레이더분들까지도 놓치고 싶지 않았습니다 😉)

그러다보니, 거래 기능을 만들고 그 외의 프로젝트 로드맵들을 이행하느라 고도화 작업은 우선순위가 계속 뒤로 미뤄지게 되었습니다.

핵심 기능, 그러나 이제 사람들의 외면을 받는 😭

이 기능을 만들 때, 우리가 얼마나 고생했는지는 사실 전혀 중요하지 않습니다. 처음 PoC 단계부터 우리 TF 팀이 얼마나 치열하게 했는지는 사실 우리한테만 중요합니다. 최종 사용자에게 중요한 것은 다른 마켓들보다 얼마나 쉽고 저렴하게 거래를 할 수 있는지, 왜 다른 마켓이 아닌 여기서 거래를 해야 하는지 어떤 차별화가 있는지 였습니다.

그런 면에서, 우리의 거래 기능은 수수료가 너무 비쌌습니다. 다른 마켓에서는 같은 NFT를 거래할 때 예를 들어 $4의 수수료만 드는데, 여기서는 $14의 수수료가 발생한다면 당연히 다른 마켓에서 거래하려고 하겠죠. (😭)

그래서 우리 마켓에서 아무리 좋은 혜택을 가진 NFT 프로젝트를 오픈해도, 그 NFT에만 관심이 있지 우리 마켓에서는 거래가 잘 발생하지 않았어요.

고생했지만, 보람이 없는 상황이랄까요. (😭😭😭)

이제는 더이상 물러날 곳이 없다🕺🏻

그래서 저희는 Wyvern Protocol을 Seaport Protocol로 변경하는 작업을 시작했습니다. Seaport Protocol은 비교적 최근에 개발된 프로토콜로 Wyvern Protocol에 비해 여러가지 개선점을 제공합니다. 가스비가 절감되고 보안성도 향상되었죠. 그리고 Wyvern Protocol보다 훨씬 추상화된 메소드를 제공하여 연동하는 것에 부담이 덜했습니다.

여기서 가장 중요한 포인트로는, 이 Protocol의 전환으로 가스비가 크게 줄어든다는 것입니다. Seaport Protocol은 거래 수행 시 필요한 가스 비용을 크게 줄일 수 있도록 설계되었습니다. 이는 특히 높은 이더리움 네트워크 수수료가 문제가 되는 상황에서 큰 장점입니다.

Seaport Protocol의 장점 🔦

  • 가스 비용 절감: 거래 시 발생하는 가스 비용을 크게 줄일 수 있는 최적화를 제공
  • 거래 유연성 증가: Seaport는 사용자가 다양한 유형(여러 아이템을 한 번에 구매하거나 판매하는 묶음 거래, 특정 조건이 충족될 때만 거래가 성사되는 조건부 거래)의 거래를 설정할 수 있도록 지원
  • 보안 강화: Seaport는 최신 보안 기술을 적용하여 설계됨
  • 효율적인 데이터 구조: Seaport는 더 효율적인 데이터 구조와 알고리즘을 사용하여 거래 데이터를 처리하여 마켓플레이스의 성능을 향상시키고, 대규모 거래를 더 원활하게 처리할 수 있게 함

왜 처음부터 Seaport Protocol로 안했을까❓

그래, 그렇게 좋다면 왜 처음부터 Seaport Protocol로 안하고 Wyvern Protocol로 했을까요? 그때를 되돌아보며 글을 쓰다보니 기억이 잘 안나서 우리 팀의 단 하나뿐인 블록체인 개발자였던 동료분께 여쭤봤습니다.

🤖: Seaport Protocol 있어요?
⛓️: 아니 없어요
🤖: 없었어요?
⛓️: 없어요
🤖: 없었어요?
⛓️: 아니 없어요!
🤖: 아 있었는데?
⛓️: 아니 없어요 그냥

개발 초기부터 Seaport Protocol이 있었다면 처음부터 Seaport Protocol로 했겠지만, 그럴 수 없었다. "없었기 때문에" 🥲

이제는 해야 할 때

개발부터 배포까지 대략 한달의 기간이 걸렸습니다. 한달을 온전히 썼다기 보다는 다른 작업까지 함께 하면서 했으니 실제 작업일만 따지면 훨씬 적겠네요.

큰 작업이었음에도 시간 단축에 도움을 준 것🐝
1. Seaport Protocol에서 제공하는 TypeScript 라이브러리
2. TypeScript를 사용하고 있었음
3. 동일한 작업 인원 (커뮤니케이션 비용 아낌)

Wyvern Protocol을 사용했을 때는 블록체인 개발자 동료와 미팅을 하며 프론트엔드와 백엔드에서 필요한 인터페이스를 제공받았습니다. 그걸 만들고 적용하고 버그를 찾고 수정하고 업데이트 하는 것에도 초반에 매우 공들였던 작업 중 하나였는데, Seaport Protocol은 그것을 자체적으로 제공하고 있었습니다. (😇) 예제까지도 깔끔하게 나와있어서 우리 코드와 비교하며 적용하기 너무 간단했습니다.

이 라이브러리에서 제공하는 Seaport 생성자 함수로 인스턴스 객체를 만들고, createOrder(혹은 fulfillOrder)를 통해 과정에 필요한 모든 액션들을 한번에 알아서 순차적으로 실행해주는 함수를 반환 받습니다.

createOrder, fulfillOrder를 통해 나오는 excuteAllActions 함수가 왜 편리했냐면, 기존에는 지금 순간에 이 거래를 위해 어떤 메소드를 실행해야 하는지를 모두 확인하여 실행하는 로직이 필요했기 때문입니다.

(NFT 판매 등록시 기준) 기존 로직

  • 거래 컨트랙트에 암호화폐 지갑 등록을 했는지 여부 확인
  • 안했다면, 암호화폐 지갑 등록 과정부터 시작 (메타마스크 지갑을 통한 서명)
  • 거래 컨트랙트에 판매하려는 NFT 컬렉션의 사용 권한을 허용했는지 여부 확인 (컨트랙트 호출)
  • 안했다면, 권한 허용 시작 (메타마스크 지갑을 통한 서명)
  • 혹시 기존에 이 NFT 아이템에 대하여 이 지갑이 생성한 판매 계약서 중 유효한 것이 있는지 확인 (API 통해서 받아온 기존 계약서로 확인)
  • 있다면, 아직 유효한 계약서를 거래가 안되도록 취소하는 과정 시작 (메타마스크 지갑을 통한 서명)
  • 위의 과정이 모두 끝나면 계약서 서명 (메타마스크 지갑을 통한 서명)

기존에는 이렇게 많은 확인과 서명 받는 로직을 모두 프론트에서 작성해야 했습니다.

(NFT 판매 등록시 기준) 변경된 로직

  • 혹시 기존에 이 NFT 아이템에 대하여 이 지갑이 생성한 판매 계약서 중 유효한 것이 있는지 확인 (API 통해서 받아온 기존 계약서로 확인)
  • 있다면, 아직 유효한 계약서를 거래가 안되도록 취소하는 과정 시작 (메타마스크 지갑을 통한 서명)
  • 그 외 나머지(권한 허용 여부 확인 및 메소드 실행)은 Seaport를 통해 처리

기존에 필요했던 지갑 등록(여부 확인 및 실행)은 아예 과정 자체가 사라졌고, NFT 컬렉션 사용 권한 승인에 대한 부분은 아예 Seaport 인스턴스 메소드가 반환한 함수가 그 과정을 대신해줍니다. (😭) 따라서 프론트엔드에서는 로직을 오히려 많이 덜어낼 수 있었습니다.

그래서 가스비가 얼마나 감소했을까?

기존에는 거래 가스비가 평균 $15 정도 들었다면, 이를 $4 내외로 절감할 수 있었습니다. (이미지가 없다는 것이 아쉽 😭)

그래서 집에 거꾸로 타는 보일러로 바꿔서 손님이 더 늘었을까요?

이렇게 큰 변경사항이 있었을 때, 거래량이 확 늘어서 임팩트가 있었다면 너무 좋았을 것 같습니다. 하지만 집에 보일러를 바꾼다고 해서 사람들이 갑자기 찾아오진 않습니다.

우리 집 보일러 바꿨다고 동네방네 소문내지 않는다면 아무도 모르는 일입니다. 🤫

거래라는 것은 결국 파는 사람이 있어야 사는 사람이 생기고, 이런 거래가 어느정도는 보여야 파는 사람도 사는 사람도 계속 늘어나는 것이겠죠?

그렇다고 배포 후 거래량이 확 늘지 않았다고 해서 아무 의미없는 작업은 아니었습니다. 이런 작업을 해야, 이 마켓에서 거래량 이벤트를 진행해볼 수도 있고 마켓에서 N차 거래가 가능한 NFT 프로젝트가 오픈된다고 했을 때도 자연스럽게 이벤트를 진행할 수 있을테니까요. 토대가 되는 작업, 무조건 해야 했던 작업이라고 생각합니다.

그래도 보일러 바꿨으니까 놀러와줬으면 좋겠다...😇!

profile
요즘 보기 드문, 자세가 올바른 프론트엔드 개발자

3개의 댓글

comment-user-thumbnail
2024년 2월 14일

안녕하세요! 항상 좋은 글 잘 읽고 있습니다.
다름이 아니라 첨부해주신 코드 부분은 따로 이미지로 만드신건가요?
velog에 글을 쓸 때마다 코드 가독성이 떨어진다고 느껴서 해결방안을 찾고 있는 중이라 문의 드립니다!

1개의 답글