ChatGPT에게 물어본 메타버스에서의 NFT와 AI의 역할
kimminhyun@comcom.ai <본 글에서 활용된 대부분의 문장과 코드는 ChatGPT를 활용해서 만들어졌습니다>
prompt: Write a blog article that explains relationship between metaverse and nfts.
인터넷을 통해 사용자가 어떤 세상에 접속하는 "메타버스"라는 용어가 최근 몇 년 동안 주목을 받고 있다. 이 몰입형 공간은 사용자들 과의 상호 방식을 포함해서, 디지털 개체를 다루는 방법을 변화시킬 가능성이 있다. 그 중 메타버스에서 상당한 성장을 보인 부분이 대체 불가능한 토큰(NFT)의 활용이라고 볼 수 있겠다. 이 글에서는 메타버스와 NFT 간의 관계와 디지털 소유권 및 인터넷에서 가치를 표현하는 방식의 미래가 어떻게 다가올 것인지를 살펴본다.
NFT(Non-Fungible Token)는 고유한 항목이나 콘텐츠의 소유권을 나타내는 디지털 자산에 할당된 아이디라고 볼 수 있다. 비트코인이나 이더리움과 같은 대체 가능한 토큰과 달리 NFT는 서로 교체하거나 교환할 수 없다. 이러한 성질은 메타버스 내의 디지털 수집품, 아트워크 및 기타 고유성을 지니는 객체들을 다루는데 이상적이다.
공유 디지털 공간인 메타버스는 NFT가 번성할 수 있는 환경을 제공하는 듯 하다. 메타버스에서 사용자는 가상 현실, 증강 현실 및 기타 형태의 디지털 미디어를 통해 다양한 방식으로 서로 및 디지털 개체와 상호 작용할 수 있다. NFT를 사용하면 이 공간 내에서 구매, 판매 및 거래할 수 있는 고유한 디지털 항목을 생성하여 새로운 형태의 디지털 소유권 및 가치를 제공할 수 있다.
메타버스를 다룰 때 전통적인 데이터베이스가 아니라 NFT 이어야만 하는 이유
기존의 관계형 데이터베이스 또는 분산 데이터베이스와 같이 잠재적으로 메타버스에 사용할 수 있는 다른 데이터베이스가 있을 수 있다. 하지만 NFT가 메타버스에 특히 적합한 몇 가지 이유가 있다. 바로 상호 운용성 (interoperability) 와 결합 가능성 (composability) 이다.
prompt: tell me examples of interoporability and composability of NFTs in metaverse.
메타버스에서 상호 운용성 (interoperability) 의 한 가지 사용 사례는 "세계 B"라는 또 다른 가상 세계에서 "세계 A"라는 가상 세계의 NFT를 사용하는 것을 의미한다. 예를 들어 "세계 A"에 플레이어가 퀘스트를 완료하여 얻은 가상 검을 나타내는 NFT가 있다고 상상해 보자. 플레이어는 "세계 B"에서 이 검을 사용하고 싶지만 "세계 B"와 "세계 A"는 서로 다른 블록체인 플랫폼에 구축되어 있다. 상호 운용성을 통해 소드 NFT는 "세계 B"에서 쉽게 전송 및 사용할 수 있다.
메타버스에서 결합 가능성 (composability) 의 사용 사례로 가상 부동산을 생각해보자. 플레이어가 가상 세계에서 가상 해변가 건물을 만들고 싶어한다. 그들은 토지, 해변, 야자수, 집, 수영장과 같은 부동산의 다양한 요소에 해당하는 여러 NFT를 획득할 수 있을 것이다. 이러한 NFT는 함께 결합되어 여러 자산으로 구성된 고유한 가상 자산을 생성하게 된다.
AI 가 NFT와 메타버스의 Interoperability를 어떻게 도와줄 수 있을까?
ERC-721 NFT 표준을 따라서 메타버스의 모든 자산들이 표현되어 있다면 메타버스 플랫폼 간의 상호 운용성과 결합 가능성을 위한 좋은 시작이다. 이에 더불어 표준이라 할지라도, 플랫폼간에 다른 구현 방식을 따르고 있다면, middleware 솔루션이 반드시 필요하다. 그런데, 인터넷 상에 N개의 메타버스가 있을 때, 상호 운용이 되는 middleware를 구축하는 작업은 N^2 에 비례하는 작업이 된다. 이 때, AI를 통해 이 문제를 해결할 수 있을지 ChatGPT에게 물어보았다.
prompt: write a code that AI helps interoperability of NFTs in metaverse.
// Sample middleware code in JavaScript
const express = require('express');
const bodyParser = require('body-parser');
const Web3 = require('web3');
const app = express();
app.use(bodyParser.json());
// Connect to first platform
const web3A = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
// Connect to second platform
const web3B = new Web3(new Web3.providers.HttpProvider("http://localhost:8546"));
// Define endpoint for NFT transfer
app.post('/transfer', async (req, res) => {
// Get data from request
const nftId = req.body.nftId;
const fromAddress = req.body.fromAddress;
const toAddress = req.body.toAddress;
// Get the current platform of the NFT
let web3;
if(await isNFTOnPlatformA(nftId)) {
web3 = web3A;
} else {
web3 = web3B;
}
// Perform NFT transfer
try {
const txHash = await web3.eth.sendTransaction({
from: fromAddress,
to: toAddress,
data: web3.utils.asciiToHex(nftId)
});
res.send({ success: true, txHash });
} catch (err) {
res.status(500).send({ success: false, error: err.message });
}
});
// Helper function to check if NFT is on first platform
const isNFTOnPlatformA = async (nftId) => {
// Check if NFT is on first platform
// This would typically involve making a call to the smart contract on the platform
// and checking if the NFT with the given ID exists
// Example:
// const contract = new web3A.eth.Contract(ABI, contractAddress);
// const nft = await contract.methods.getNFT(nftId).call();
// return nft != null;
//...
}
// Start the middleware server
app.listen(3000, () => {
console.log('Middleware listening on port 3000!');
});
web3A 와 web3B가 있을 때 어떻게 상호 transfer가 되게 할 것인지에 대해서 훌륭하게 구현을 해 낸것을 볼 수 있다. 더 나아가, 만약 한 메타버스 플랫폼이 python을 사용하고, 다른 하나가 javascript를 사용할 때도 대응할 수 있을까?
prompt: Let's say web3A is written in python and web3B is written in javascript. How will you handle?
// web3A (Python)
from concurrent import futures
import grpc
import web3
# import generated protobuf files
import middleware_pb2
import middleware_pb2_grpc
class Web3A(middleware_pb2_grpc.MiddlewareServicer):
def __init__(self):
self.web3 = web3.Web3(web3.HTTPProvider('http://localhost:8545'))
def TransferNFT(self, request, context):
nft_id = request.nft_id
from_address = request.from_address
to_address = request.to_address
# Perform NFT transfer
tx_hash = self.web3.eth.sendTransaction({
'from': from_address,
'to': to_address,
'data': web3.toHex(nft_id)
})
return middleware_pb2.TransferNFTResponse(tx_hash=tx_hash)
def serve():
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
middleware_pb2_grpc.add_MiddlewareServicer_to_server(Web3A(), server)
server.add_insecure_port('[::]:50051')
server.start()
server.wait_for_termination()
if __name__ == '__main__':
serve()
// web3B (JavaScript)
const grpc = require('grpc');
const Web3 = require('web3');
const middlewareProto = grpc.load('./middleware.proto').middleware;
const web3B = new Web3(new Web3.providers.HttpProvider("http://localhost:8546"));
const client = new middlewareProto.Middleware('localhost:50051', grpc.credentials.createInsecure());
const transferNFT = (nftId, fromAddress, toAddress) => {
client.transferNFT({nftId, fromAddress, toAddress}, (err, response) => {
console.log(response);
});
}
transferNFT(1, '0x123', '0x456');
web3A(Python으로 작성됨)와 web3B(JavaScript로 작성됨) 간의 통신을 위한 웹 서비스로 gRPC를 도입한 후에, 전반적으로 middleware가 해야하는 일을 잘 묘사함을 볼 수 있다.
Prompt: this is very useful. Do you think AI can help interoporability of Metaverse a lot?
이렇듯, AI는 잠재적으로 메타버스의 상호 운용성을 돕는 데 중요한 역할을 할 수 있다. 메타버스는 여러 플랫폼, 프로토콜 및 표준을 포함하는 복잡하고 빠르게 진화하는 생태계이다. AI는 이러한 서로 다른 구성 요소를 연결하고 이들 간의 원활한 통신 및 상호 작용을 가능하게 하는 데 도움이 될 수 있다.
AI가 메타버스에서 상호 운용성을 도울 수 있는 한 가지 방법은 자연어 처리(NLP)를 사용하여 서로 다른 플랫폼과 프로토콜 간의 명령과 요청을 이해하고 번역하는 것이다. 예를 들어 AI 기반 에이전트는 "가상 주택 구매"에 대한 사용자의 요청을 이해하고 블록체인에서 스마트 계약을 실행하는 것과 같이 기본 플랫폼에서 적절한 조치로 변환할 수 있을 것이다.
AI가 메타버스에서 상호 운용성을 도울 수 있는 또 다른 방법은 기계 학습(ML)을 사용하여 다양한 플랫폼과 프로토콜에서 패턴과 추세를 식별하는 것입니다. 이를 통해 메타버스와 연결하고 상호 작용하는 새롭고 보다 효율적인 방법을 만들 수 있다.
또한 AI는 자연어 쿼리 시스템 또는 음성 제어를 제공하여 다양한 플랫폼, 프로토콜 및 스마트 계약에 대한 공통 인터페이스를 제공하는 데 도움을 줄 수 있다.
요컨대, AI는 메타버스를 보다 상호 운용 가능하고 사용자 친화적으로 만드는 데 핵심적인 역할을 할 수 있다. 그러나 이 분야에서 AI의 개발 및 통합은 아직 초기 단계이며 더 많은 연구 및 개발이 필요하다는 점에 유의해야 한다.
AI 가 NFT와 메타버스의 Composability를 어떻게 도와줄 수 있을까?
prompt: How can AI helps composability of NFTs in metaverse?
AI는 여러 가지 방법으로 메타버스에서 NFT의 조합 가능성을 도울 수 있다.
먼저 스마트 컨트랙트를 자동으로 생성할 수 있다. NFT 들의 스마트 컨트랙트는 그렇게 복잡하지 않은데, 개발자가 아니면 사소한 변경사항도 하기 어려웠던 단점이 있다. AI가 새로운 NFT를 생성하고 기존들과 결합된 형태의 소유권, 이전 및 교환을 관리하는 데 사용할 수 있는 NFT용 스마트 컨트랙트를 자동으로 생성하는 데 도움을 줄 수 있다. 이를 통해 NFT 생성 및 관리 프로세스를 간소화 되면 Composability가 높아진다.
NFT 를 검색하는 데 사용할 수 있다. 이미 너무도 비슷하고 많은 NFT들이 발행된 가운데, 나에게 딱 적합한 아이템을 검색을 하려면 자연어 처리(NLP)를 사용하여 사용자 쿼리를 이해한 다음 기계 학습(ML)을 사용하여 해당 쿼리를 관련 NFT에 일치시키도록 만들 수 있다. 구체적인 예제를 살펴보자.
prompt: write a sample code for showing how AI can convert natural language to querying NFT metadata.
import spacy
import json
# Loading the spacy language model
nlp = spacy.load('en_core_web_sm')
# Defining the NFT metadata
nft_metadata = {
"id": "12345",
"name": "Virtual House",
"creator": "John Smith",
"category": "Real Estate",
"rarity": "Rare"
}
# Function to parse the user query and extract the relevant information
def parse_query(query):
doc = nlp(query)
keywords = []
for token in doc:
if token.pos_ in ['NOUN', 'PROPN']:
keywords.append(token.text)
return keywords
# Function to search the NFT metadata based on the user query
def search_nft(query):
keywords = parse_query(query)
for keyword in keywords:
for key, value in nft_metadata.items():
if keyword.lower() in value.lower():
print(f"{key}: {value}")
# Example user query
query = "I am looking for a rare virtual house created by John Smith"
# Searching the NFT metadata based on the user query
search_nft(query)
# Output:
# name: Virtual House
# creator: John Smith
# rarity: Rare
위의 코드는 “I am looking for a rare virtual house created by John Smith” 라고 자연스럽게 사용자가 입력을 하면, Python의 spaCy 라이브러리를 사용해서, 사용자 쿼리를 구문 분석하고 관련 정보를 추출한 다음 사용자 쿼리에서 얻은 키워드를 기반으로 NFT 메타데이터를 검색한다. 보통 게임을 할 때, 헤드폰을 끼고 하는 경우가 많을 텐데, 키보드로 검색을 하는게 아니라, 필요한 NFT 아이템을 STT (Speach to Text) 로 주문하면 자연스럽게 내 아바타에 주문이 완료되어서 착용되는 시나리오를 생각해 볼 수 있다.
NFT 분류하는데 도움을 줄 수 있다. AI는 NFT 유형, 생성자, 희귀도 등과 같은 속성 및 속성을 기반으로 NFT를 분류할 수 있고, 이를 통해 사용자는 관심 있는 NFT를 쉽게 찾고 식별할 수 있으므로 Composability가 높아진다.
NFT 조합할 수 있다. AI는 기존 NFT를 결합, 편집 및 보강할 수 있는 도구로 사용될 수 있는데, 컴퓨터 비전 및 3D 모델링 기술을 사용하여 NFT의 모양을 편집하거나 자연어 처리(NLP)를 사용하여 사용자 입력을 기반으로 새로운 NFT를 생성할 수 있다. 예를 들어, Stable Diffusion을 사용하면, 내가 원하는 형태의 그림을 조합하는 것이 가능하다. 이에 관련해서는 많은 시도들이 있어 왔는데, 자세한 내용은 다음 reddit 글의 실험을 참고해보자.
prompt: pink hair, double bun, closed eyes, fox ears, pale skin, wide hips, winter coat, pants, laughing, dutch angle, snowing
머리 모양, 눈, 꼬리, 귀, 코트, 웃는 모습, 배경에 눈까지 조합이 가능함을 알 수 있다.
또한, AI를 NFT 검증하는데 사용할 수 있다. 사용하여 NFT의 진위와 소유권을 검증할 수 있으므로 사기를 방지하고 NFT의 Composability를 보장할 수 있다.
prompt: write a closing remarks how NFTs and AI can form metaverse in terms of composability and interoperability.
결론적으로 NFT와 AI는 사용자가 매끄럽고 몰입감 있는 방식으로 디지털 자산과 상호작용하고 참여할 수 있는 가상 공간인 메타버스 개발에서 중요한 역할을 할 수 있는 잠재력을 가지고 있다. 이것의 한 가지 핵심 측면은 서로 다른 디지털 자산을 다양한 방식으로 서로 결합하고 통합할 수 있는 기능을 나타내는 구성 가능성(Composability) 이다. 이를 통해 메타버스 내에서 독특하고 역동적인 경험을 만들 수 있다.
메타버스에서 NFT와 AI의 또 다른 주요 측면은 서로 다른 시스템과 플랫폼이 원활하게 함께 작동할 수 있는 능력을 의미하는 상호 운용성 (Interoporability) 이다. 이를 통해 다양한 플랫폼과 장치에서 다양한 디지털 자산과 경험을 원활하게 통합할 수 있으므로 사용자가 어느 위치에서나 메타버스에 쉽게 액세스하고 참여할 수 있다.
전반적으로 NFT와 AI는 메타버스에 새로운 수준의 상호작용과 몰입감을 제공하여 사용자가 디지털 자산을 탐색하고 상호작용할 수 있는 진정으로 역동적이고 매력적인 공간을 만들 수 있는 잠재력을 가지고 있다. 기술이 계속 발전함에 따라 NFT 및 AI 분야에서 훨씬 더 흥미로운 발전과 미래의 메타버스를 형성하는 방법을 기대할 수 있다.
https://discord.gg/aindao 에 #text-to-art 채널에 가시면 Stable Diffusion 을 체험할 수 있습니다.