NFFT 및 OpenSea
만든 물건
대체 토큰과 비 대체 토큰에 대해
NFFT는 비대체 토큰으로 불리지만, 그 반대의 대체 토큰은 지금까지 ERC20 토큰이 된다.
실제 ERC20을 구현하는 데서 알 수 있듯이
mapping(address => uint256) private _balances;
주소마다 영패를 설정하는 양에 대해 이 영패의 하나하나는 다르지 않고 대체할 수 있다.NFFT는 ERC 721의 규격에 부합하는 것이 하나 있는데, 똑같이 본 후에
mapping(uint256 => address) private _owners;
는 현재'uint256'(영패의 ID)를 주소에 연결하는 형식으로 누가 특정 영패의 ID를 가지고 있는지 확인할 수 있다.이 경우 토큰마다 아이디가 다르기 때문에 대체적이지 않다.NFC 중 ERC 1155 표준에 부합되는 것이 하나 더 있다. 바로
mapping(uint256 => mapping(address => uint256)) private _balances;
ERC 721과 달리 특정 토큰의 ID가 주소와 연결되고 토큰이 몇 개 있는지를 설정하는 부분이다.따라서 ERC 1155는 ERC20과 ERC721의 하이브리드라고 불린다.이를 통해 알 수 있듯이 이른바 NFFT는 단순히 영패의 ID와 소지자의 주소를 연결했을 뿐 이상도 이하도 아니다.그렇다면 텔레비전에서 자주 보는 예술 작품은 어디에 있을까
ERC721
ERC1155
서명만 보면 알 수 있습니다. 어쨌든 영패의 ID를 매개 변수로 메타데이터에 대응합니다.json의 URL, 메타데이터를 가져옵니다.그림의 URL 등 json에 들어가는 내용입니다.
예를 들어 OpenSea의 메타데이터.json
이렇게 정해져 있습니다.
ERC 721 및 ERC 1155 NFFT 제작, OpenSea 처리
OpenSea는 NFC의 시장 광장이다.
오픈세아에서는 리키가 테스트망으로 사용할 수 있기 때문에 리키에서 자체 제작한 구성을 디자인해 오픈세아에서 확인한다.
ERC 721 및 ERC 1155 구조기를 작성하여 설계
아까도 예시에서 제시한 OpenZeppelin을 사용해 가볍게 설치했다.
요점은
mint
의 방법(신규 발행)과 메타데이터다.jsonuri, tokenURI
을 되돌려주는 방법.그 외에는 필요 없다.이전에도 소개했듯이 이번 구조기도
truffle
로 제작돼 테스트 상태에서 디자인됐다.각 방법에 관하여 나는 생략할 것이다.디버깅을 진행하면 디버깅된 구조기의 주소와 당시의 ABI를 얻을 수 있기 때문에 그것을 저장할 것입니다.
ABI는 바이너리에 액세스하기 위한 Application Binary Interface의 약어입니다.
Rust mint으로 설계된 아키텍처 mint
언어는 다 괜찮지만 사용하고 싶어서rust-web3 Rust로 실시합니다.
명령행 도구로 만들어져서 많이 썼는데 요점은
let base_url = env::var("ETHEREUM_URL").expect("ETHEREUM_URL must be set");
let transport = transports::Http::new(&base_url).ok().unwrap();
let cli = Web3::new(transport);
ETHEREUM_URL
에서 액세스infra에서 획득한 Rinkey의 URL을 지정합니다.그걸로 웹 3 설치 만들기
let contract = Contract::from_json(
self.cli.eth(),
parse_address(self.contract_address.clone()).unwrap(),
include_bytes!("rust-token721.abi.json"),
)?;
방금 디자인한 구조기 주소와 디버깅할 때의 구조기 ABI를 읽고contract 대상 만들기let prev_key = SecretKey::from_str(&self.wallet_secret.clone()).unwrap();
let gas_limit: i64 = 5500000;
let gas_price: i64 = 35000000000;
let c = self.contract()?;
let result = c
.signed_call_with_confirmations(
"mint",
(
parse_address(self.wallet_address.clone()).unwrap(),
name
),
Options::with(|opt| {
opt.gas = Some(U256::from(gas_limit));
opt.gas_price = Some(U256::from(gas_price));
}),
1,
SecretKeyRef::from(&prev_key),
)
.await?;
서명이 필요한 구조기에 대한 접근은 이러한 느낌입니다. 먼저 기밀 키, 이름signed_call_with_confirmations
을 얻어서 문자열로 호출할 방법을 지정하면 됩니다.gas_limit
와 gas_price
를 잘 설정하세요.이 코드로 방금 디자인한 구조기의 mint 방법을 호출하면 자신이 만든 구조기 안에서 새로운 NFFT를 발행할 수 있다.
물론 서명은 필요한 방법이기 때문에 이 순간에 자신의 등her를 소모한다.따라서 지정한 비밀 키와 연결된 지갑에 상수 링키가 사용할 수 있는 ether를 넣으십시오.
위 코드는 ERC 721에 대한 mint 코드이며 ERC 1155 구성에도 액세스할 수 있습니다.
ABI는 ERC 1155의 를 읽어야 합니다.
ERC 721과 달리 아까 말씀드렸듯이
mint
시에만 amount 부분을 지정합니다.let prev_key = SecretKey::from_str(&self.wallet_secret.clone()).unwrap();
let gas_limit: i64 = 5500000;
let gas_price: i64 = 35000000000;
let c = self.contract()?;
let result = c
.signed_call_with_confirmations(
"mint",
(
parse_address(self.wallet_address.clone()).unwrap(),
name,
amount,
),
Options::with(|opt| {
opt.gas = Some(U256::from(gas_limit));
opt.gas_price = Some(U256::from(gas_price));
}),
1,
SecretKeyRef::from(&prev_key),
)
.await?;
서명이 필요 없는 구조기에 접근하는 것이 더욱 간단해진다let c = self.contract()?;
let result = c.query("name", (), None, Options::default(), None);
let name: String = result.await?;
이렇게 액세스합니다.가장 중요한 부분만 싣고 설명을 했지만 전체 소스 코드를 통해 마인드를 구조기의 전 단계, 특정 영패와 관련된 메타데이터로 옮겼다.json을 생성하고 업로드하는 처리가 있습니다.
metadata.만약 json이 없다면 mint를 진행하더라도 OpenSea는 이 영패 ID와 관련된 자산을 찾을 수 없습니다.
지금까지는 지정된 기밀 키와 연관된 지갑 계정으로 OpenSea에 로그인해 자신이 만든 NFFT를 확인할 수 있었다.
OpenSea에서 NFFT 거래를 진행하다
OpenSea의 UI에서 정상적으로 매매할 수 있다.
하지만 이번에는 코드에서 그걸 진행할게요.
OpenSea에는 SDK가 있습니다.
이것을 사용하여 README에 따라 진행하면 끝납니다. 그러나 위에 쓰지 않은 주의사항은 비밀 키를 설정하는 것입니다.
NOTE: Using the sample Infura provider above won't let you authorize transactions, which are needed when approving and trading assets and currency. To make transactions, you need a provider with a private key or mnemonic set.
const provider = new HDWalletProvider("ウォレットの秘密鍵", "イーサリアムネットワークのURL");
const seaport = new OpenSeaPort(provider, {
networkName: Network.Rinkeby, // イーサリアムネットワークに合わせる
apiKey: "OpenSeaのAPIキー",
})
테스트망에 연결하려면 API 키가 필요 없고 undefined로 미리 설정해야 합니다.(공백 문자도 사용할 수 없음)HDWalletProvider
는 여기.의 포장에 방금 등장한 truffle
안에 이루어진 것이다.이걸 쓰면 이번에는 비밀 열쇠를 넣어야 하고, 고조파 초기화도 가능하다는 설명이다.
여기에 도착하면 설명대로 사용할 수밖에 없다.
NFC 가져오기 시도
판매 주문서 및 구매 주문서 수령 후
NFC 실제 구매
다른 주소의 NFC를 보냅니다.
SDK는 OpenSea의 UI에서 기본적인 작업을 수행할 수 있습니다.
그나저나 Get 시스템의 간단한 작업은 API를 통해서도 가능합니다.
여기서 흥미로운 것은 오픈세아가 NFFT 소유권 이전을 어떻게 했는지 부분이다.
의문을 품고 SDK의 내용을 살짝 엿보았는데 그곳
wyvern
의 구조가 그 안에 존재하는데 그곳을 방문해서 무엇을 진행하는 것 같았다.wyvern
에 대한 상세한 내용은 다음 기회에 기사를 써 보려고 합니다.최후
Reference
이 문제에 관하여(NFFT 및 OpenSea), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/aki030402/articles/f6e32dd5b3a59b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)