일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- rust 기초
- ethers
- 스마트컨트렉트 예약어 함수이름 중복
- 체인의정석
- Vue.js
- 컨트렉트 배포 자동화
- ambiguous function description
- 오블완
- 스마트컨트렉트 함수이름 중복 호출
- 러스트 기초
- erc4337 contract
- SBT표준
- 스마트 컨트렉트 함수이름 중복
- ethers v6
- Vue
- 티스토리챌린지
- ethers typescript
- ethers websocket
- erc4337
- 계정추상화
- 러스트 기초 학습
- 컨트렉트 동일한 함수이름 호출
- 러스트기초
- vue기초
- chainlink 설명
- 스마트컨트렉트테스트
- git rebase
- ethers type
- multicall
- 머신러닝기초
- Today
- Total
체인의정석
오픈씨 스마트 컨트렉트 구매 패턴 분석 본문
먼저 오픈씨는 #Rinkeby네트워크 에서 테스트가 가능하다.
우선 오픈씨를 테스트 하기위하여 간단한 NFT를 배포해 볼 수 있다.
NFT를 배포하는 부분은 일단 생략하기로 하겠다.
https://it-timehacker.tistory.com/210
지난번에 올린 배포하는 법을 참고해서 하면 된다.
아니면 리믹스에서 배포하는 간단 코드는 #리믹스코드배포
pragma solidity ^0.8.0;
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol";
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol";
contract EthanToken is ERC20, Ownable {
constructor() ERC20("EthanToken", "ET") {
}
function mint(uint256 amount) public onlyOwner{
_mint(_msgSender(),amount);
}
}
요런식으로 하면 된다. 하드햇으로 짜다보니 지금은 ERC20밖에 없지만 나중에 따로 만들어서 다 정리할 예정이다.
일단
만들어진 토큰으로 시도를 하겠다.
#openseaTestnet #오픈씨테스트넷 은 아래 사이트에서 이용 가능하다.
1. 판매등록 과정 분석
일단 리스팅 부터 하겠다.
수수료 총 12.5% 가격 100이더로 놓고 판매를 누르면 총 3개의 스텝이 나온다.
https://rinkeby.etherscan.io/tx/0x7c5e5e22580af2db6f54efbc92aed036b22860b54da2f7f48efa64856214da83
처음에 대한 내용은 위의 트랜잭션에서 볼 수 있다.
인터널 트랜잭션을 보면 register Proxy가 나온다.
delegate call로 무언가가 만들어 진것을 볼 수 있다.
프록시 컨트렉트로 지갑을 만드는게 아닐까 싶다.
"To get set up for selling on OpenSea for the first time, you must initialize your wallet, which requires a one-time gas fee."
오픈씨에서의 지갑 등록은 딱 한번만 이루어진다.
ERC721의 setApproveForAll을 사용한다.
상호작용하는 각 컨트렉트별로 한번씩 사용하면 된다.
Wyvern은 레이어2를 이용한다고 되어 있으며, 2018년 이후로 새로운 업데이트가 없다.
오픈씨가 매수를 했거나 돈을 주고 독점한게 아닐까 싶다.
일단 1250 숫자를 통해 판매할때는 makerRelayerFee에서
maker (거래를 making 하는쪽에서 내는 비용) 인거 같다.
해당 서명은 수수료를 받는 주소, 여기선 오픈씨가 되는거 같다.
exchange 는 wyvern exchange를 나타낸다.
해당 내용은 트렌젝션으로 기록되지는 않는다.
레이어 2에서 사용하기 위하여 정보를 제공하는것에 대해 미리 서명을 받아놓고 이는 누군가가 구매할때 해당 정보를 불러와서 구매를 할 것이다.
Lower price - 가격을 내리는 명령어 (수수료가 발생하지 않음)
가격을 낮추는것은 Lower Price 인데 서명에 들어가는 정보를 비교 해보면
basePrice 부분만 바뀌는것을 볼 수 있다.
한마디로, NFT의 판매 상태가 블록체인에 기록은 안되더라도 Wyvern 컨트렉트에 저장된다고 볼 수 있다.
이 정보는 추후 누군가 구매될 때 트랜잭션을 동시에 (atomic) 발생시키기 위해서 사용될 것이다.
따라서 지금은 가스비가 발생하지 않는다.
2. 구매 과정 분석
NFT를 리스팅 한 계정과 다른 계정으로 접속을 하여 구매를 실행
Atomic Match 함수 실행
구매완료
Atomic match 실행
수수로는 오픈씨 계정으로 가고 이더리움은 판매한 사람에게 토큰은 나에게로 전송, 판매자가 서명한 fee 가 이때 빠져나가서 fee를 받는 주소로 들어가게 된다.
이 요청은 Wyvern Exchange 컨트렉트로 가서 실행되게 된다.
Proxy contract를 써서 해당 컨트렉트에 직접 트랜잭션이 찍혀 있음을 확인할 수 있었다.
결론
Wyvern Exchange는 판매 등록 시에 NFT를 올리거나 판매정보를 바꿀때마다 이를 저장하고 있다가.
누군가가 해당 NFT를 사면 해당 정보를 바탕으로 한번의 트랜잭션으로
1. 수수료 회수(오픈씨) + 판매금 지급(판매자)
2. NFT 전송 (구매자)
를 한번에 해서 이름이 atomic match 이다.
#오픈씨분석 #오픈씨컨트렉트 #오픈씨코드 #OpenseaContract
'블록체인 > NFT & BRIDGE' 카테고리의 다른 글
Wyvern Exchange 서명 관련 참고 자료 (0) | 2022.06.29 |
---|---|
오픈씨 컨트렉트 Offer를 통한 구매 패턴 분석 (0) | 2022.03.16 |
트레블룰을 만족하는 크로스체인 NFT 브릿지 , 논문 계획서 초안 (0) | 2022.02.20 |
스마트컨트렉트 디버깅 하기) erc721 burn에 대한 테스트 오류 해결 (0) | 2022.02.14 |
ERC721의 safeTransferFrom (0) | 2022.02.14 |