Transfer Multiple(Bulk) NFTs

안녕하세요! 여러 NFT를 한번에 전송(tranfer)하는 기능을 구현하려고 하는데 여러 NFT전송을 서명 한번으로 전송할 수 있는 방법이 있을까요?
아니면 클레이튼에서는 하나의 NFT전송당 꼭 한번의 서명이 필요한가요?

가능합니다. 다만 여러개의 nft를 transfer하는 스마트컨트랙트 함수를 별도로 작성하셔야 될겁니다.
erc721(nft) 표준 컨트랙트는 해당기능을 지원하지 않기 때문입니다.

답변 감사합니다! 그럼 궁금한 점 몇가지 더 여쭤볼게요

현재 A라는 스마트컨트랙트로 민팅된 NFT들이 있고, A컨트랙트의 ABI에는 여러개의 nft를 transfer하는 함수가 존재하지 않는 상태입니다.

Q. 그럼 A컨트랙트에 함수를 추가하는 등의 수정이 가능한가요?
Q. 함수를 추가해도 A컨트랙트의 주소는 바뀌지 않나요?
Q. A컨트랙트 수정이 불가능하다면 현재 A컨트랙트로 민팅된 NFT들은 여러개를 한번에 transfer하는 기능은 불가능한건가요?

Q1, Q2 : nft 컨트랙트에 함수를 추가하는 등의 수정은 본인 마음대로 하셔도 좋으나, 추가를 하신 컨트랙트를 사용하려면 당연하게도 배포를 다시해야 합니다. 그러면 당연하게도 주소는 바뀌겠죠?
Q3 : 가능합니다. '별도의 스마트 컨트랙트’를 작성하시면 됩니다. 예를들어 opensea 같은 경우도 스마트컨트랙트로 동작하는 탈중앙 nft 마켓플레이스 입니다. opensea의 경우 한 계정에서 여러개의 nft를 한 트랜잭션으로 보내는 기능이 가능하죠. batch로 보내는기능을 opensea 컨트랙트에 구현했기 때문에 가능한 겁니다.

1 Like

페퍼님이 답변을 잘 달아 주셨지만 제 나름대로 더 이해가 쉽게 한번 더 추가 설명 드려보겠습니다.

제가 예전에 개발했던 내용중 하나이네요

질문을 보니 뭘 의도 하시는진 알겠습니다.

우선 컨트랙트는 한번 배포 되면 해당 컨트랙트의 펑션 업데이트는
컨트랙트 자체가 프럭시 기능을 구현하지 않았다면 펑션 업데이트는 불가능 합니다.

발행 하는 보통의 엔에프티 컨트랙트들은 프록시 기능을 내장 하지 않고요
그 이유는 해당 컨트랙트를 사용하기 위해 신뢰성을 확보하기 위함입니다.

따라서 첫번재 질문에 대한 답은 이미 배포된 컨트랙트의 펑션 추가등의 수정은 불가능하다입니다,.

두번째는 첫번째 질문에 따라 애초에 함수 추가가 프록시의 기능을 구현하지 않았다며 추가 자체가 불가능하다답변입니다.

세번째 컨트랙트 수정이 불가능 한상태에서 여러개 트랜스퍼 기능은 불가능 할까 인데요

페퍼 님이 말슴 하신것 처럼 별도의 멀티 전송 컨트랙트를 만들고 해당 컨트랙트를 이용하여 멀티 전송이 가능하게 됩니다.

좀더 이 부분을 자세히 설명드리면 멀티 전송 컨트랙트에 사용자가 본인이 소유한 엔에프티들에 대해 권한 위임 즉 어프로브를 하고 해당 멀티 전송 컨트랙트에서 이동 원하는 엔에프티들을 배열로 받아서 컨트랙트 내에서 트랜스퍼를 시키면 됩니다.

예전에 클레이튼 수수료가 업데이트 되기 전에는 멀티 전송 할때 배열로 넘겼을시에 트랜젝션 사이즈 문제로(트랜젝션에 멀티 전송할 아이디를 기입하다보니 사이즈가 늘어납니다) 100개 정도가 한계였던걸로 기억합니다.

1 Like