0x.js를 사용하여 0x 프로토콜의 스마트 계약 사용 (개요)
동기 부여
DEX(분산형 거래소)를 위한 프로토콜인 0x[1]을 접하고, 0x.js에서, 주문의 작성, 기입, 검증을 실시한다. 0x.js의 상세에 대해서는 또 다음에 정리한다. 실수, 의견이 있으시면 Twitter를 통해로 문의하십시오.
설정
0x.js는 Ethereum과 접속해 어플리케이션과 블록체인간의 인터페이스가 되는 역할이 있다. Ethereum node로는 ganache-cli를 사용한다.
0x가 준비되어 있다 0x starter project
[2]를 사용한다.git clone https://github.com/0xProject/0x-starter-project.git
디펜던시를 설치하기 위해 yarn
를 사용한다.
1. yarn
를 설치하지 않은 경우brew install yarn --without-node
2. yarn
를 설치한 경우yarn
3. 최신 Ganache 0x snapshot 다운로드yarn download_snapshot
4. 다른 터미널을 열고 ganache를 시작합니다.yarn ganache-cli
여기까지를 정리하면 다음과 같은 느낌.
Stareter Project에서 준비된 fill_order_erc20
를 실행합니다.yarn scenario:fill_order_erc20
* fill_order_erc20
는 WETH와 ZRX를 교환하는 주문
yarn run v1.12.3
$ cross-env yarn build && node ./lib/scenarios/fill_order_erc20.js
$ cross-env tsc
┌────────────┐
│ Fill Order │
└────────────┘
Accounts
Maker 0x5409ed021d9299bf6814279a6a1411a7e866a631
Taker 0x6ecbe1db9ef729cbe972c83fb886247691fb6beb
Setup
Maker ZRX Approval 0xf8f93512e3ebaaf57fa0eb9dd1c485b6f4633c37d199e9a913e76d05084f2604
Taker WETH Approval 0x292759c139ed6fdc40646083c0346a9630b2b33cfed2947e1a21f289c8eb703a
Taker WETH Deposit 0x566b6a876c4482849cab9563b6a1ebd03eb31201c2b028c15770b185a4b4aab1
Order
exchangeAddress 0x35dd2932454449b14cee11a94d3674a936d5d7b2
makerAddress 0x5409ed021d9299bf6814279a6a1411a7e866a631
takerAddress 0x0000000000000000000000000000000000000000
senderAddress 0x0000000000000000000000000000000000000000
feeRecipientAddress 0x0000000000000000000000000000000000000000
expirationTimeSeconds 1545108409
salt 7119368013313422661221815072055438267987023853367738570035607824850986278…
makerAssetAmount 5000000000000000000
takerAssetAmount 100000000000000000
makerAssetData 0xf47261b00000000000000000000000002002d3812f58e35f0ea1ffbf80a75a38c32175fa
takerAssetData 0xf47261b0000000000000000000000000d0a1e359811322d97991e03f863a0c30c2cf029c
makerFee 0
takerFee 0
Allowances
Token Maker Taker
WETH MAX_UINT MAX_UINT
ZRX MAX_UINT MAX_UINT
Balances
Token Maker Taker
WETH 2.43070141021160417 1.536283635869423603
ZRX 9998.9999945 929.25100549999999803
ETH 2.169765236821913251 0.102365525385971059
Transaction
┌───────────┬────────────────────────────────────────────────────────────────────┐
│ fillOrder │ 0x16f4754cc08f9f76f53185685c591e384dffdcc21165254f60840082fd1585b6 │
├───────────┼────────────────────────────────────────────────────────────────────┤
│ orderHash │ 0x2f25d912d6e5384eb2ab73275c0ba66ff39f7f132ce6b7e5b79be018baa4bcf5 │
├───────────┼────────────────────────────────────────────────────────────────────┤
│ gasUsed │ 117586 │
├───────────┼────────────────────────────────────────────────────────────────────┤
│ status │ Success │
└───────────┴────────────────────────────────────────────────────────────────────┘
Logs
Fill
contract 0x35dd2932454449b14cee11a94d3674a936d5d7b2
makerAddress 0x5409ed021d9299bf6814279a6a1411a7e866a631
feeRecipientAddress 0x0000000000000000000000000000000000000000
takerAddress 0x6ecbe1db9ef729cbe972c83fb886247691fb6beb
senderAddress 0x6ecbe1db9ef729cbe972c83fb886247691fb6beb
makerAssetFilledAmount 5000000000000000000
takerAssetFilledAmount 100000000000000000
makerFeePaid 0
takerFeePaid 0
orderHash 0x2f25d912d6e5384eb2ab73275c0ba66ff39f7f132ce6b7e5b79be018baa4bcf5
makerAssetData 0xf47261b00000000000000000000000002002d3812f58e35f0ea1ffbf80a75a38c32175fa
takerAssetData 0xf47261b0000000000000000000000000d0a1e359811322d97991e03f863a0c30c2cf029c
Transfer
contract 0x2002d3812f58e35f0ea1ffbf80a75a38c32175fa
_from 0x5409ed021d9299bf6814279a6a1411a7e866a631
_to 0x6ecbe1db9ef729cbe972c83fb886247691fb6beb
_value 5000000000000000000
Transfer
contract 0xd0a1e359811322d97991e03f863a0c30c2cf029c
_from 0x6ecbe1db9ef729cbe972c83fb886247691fb6beb
_to 0x5409ed021d9299bf6814279a6a1411a7e866a631
_value 100000000000000000
Balances
Token Maker Taker
WETH 2.53070141021160417 1.436283635869423603
ZRX 9993.9999945 934.25100549999999803
ETH 2.169765236821913251 0.102247939385971059
✨ Done in 70.05s.
여기서 ganache의 계정 1(0x5409ed021d9299bf6814279a6a1411a7e866a631)이 주문을 만들고 계정 2(0x6ecbe1db9ef729cbe972c83fb886247691fb6) 즉, 계정 1이 Maker이고 계정 2가 Taker입니다. Balance를 보면, Maker의 WETH가 증가하고 있어, Taker의 ZRX가 적게 되어 있는 것을 알 수 있다.
참고 기사
0x.js는 Ethereum과 접속해 어플리케이션과 블록체인간의 인터페이스가 되는 역할이 있다. Ethereum node로는 ganache-cli를 사용한다.
0x가 준비되어 있다
0x starter project
[2]를 사용한다.git clone https://github.com/0xProject/0x-starter-project.git
디펜던시를 설치하기 위해
yarn
를 사용한다.1.
yarn
를 설치하지 않은 경우brew install yarn --without-node
2. yarn
를 설치한 경우yarn
3. 최신 Ganache 0x snapshot 다운로드yarn download_snapshot
4. 다른 터미널을 열고 ganache를 시작합니다.yarn ganache-cli
여기까지를 정리하면 다음과 같은 느낌.
Stareter Project에서 준비된
fill_order_erc20
를 실행합니다.yarn scenario:fill_order_erc20
*
fill_order_erc20
는 WETH와 ZRX를 교환하는 주문yarn run v1.12.3
$ cross-env yarn build && node ./lib/scenarios/fill_order_erc20.js
$ cross-env tsc
┌────────────┐
│ Fill Order │
└────────────┘
Accounts
Maker 0x5409ed021d9299bf6814279a6a1411a7e866a631
Taker 0x6ecbe1db9ef729cbe972c83fb886247691fb6beb
Setup
Maker ZRX Approval 0xf8f93512e3ebaaf57fa0eb9dd1c485b6f4633c37d199e9a913e76d05084f2604
Taker WETH Approval 0x292759c139ed6fdc40646083c0346a9630b2b33cfed2947e1a21f289c8eb703a
Taker WETH Deposit 0x566b6a876c4482849cab9563b6a1ebd03eb31201c2b028c15770b185a4b4aab1
Order
exchangeAddress 0x35dd2932454449b14cee11a94d3674a936d5d7b2
makerAddress 0x5409ed021d9299bf6814279a6a1411a7e866a631
takerAddress 0x0000000000000000000000000000000000000000
senderAddress 0x0000000000000000000000000000000000000000
feeRecipientAddress 0x0000000000000000000000000000000000000000
expirationTimeSeconds 1545108409
salt 7119368013313422661221815072055438267987023853367738570035607824850986278…
makerAssetAmount 5000000000000000000
takerAssetAmount 100000000000000000
makerAssetData 0xf47261b00000000000000000000000002002d3812f58e35f0ea1ffbf80a75a38c32175fa
takerAssetData 0xf47261b0000000000000000000000000d0a1e359811322d97991e03f863a0c30c2cf029c
makerFee 0
takerFee 0
Allowances
Token Maker Taker
WETH MAX_UINT MAX_UINT
ZRX MAX_UINT MAX_UINT
Balances
Token Maker Taker
WETH 2.43070141021160417 1.536283635869423603
ZRX 9998.9999945 929.25100549999999803
ETH 2.169765236821913251 0.102365525385971059
Transaction
┌───────────┬────────────────────────────────────────────────────────────────────┐
│ fillOrder │ 0x16f4754cc08f9f76f53185685c591e384dffdcc21165254f60840082fd1585b6 │
├───────────┼────────────────────────────────────────────────────────────────────┤
│ orderHash │ 0x2f25d912d6e5384eb2ab73275c0ba66ff39f7f132ce6b7e5b79be018baa4bcf5 │
├───────────┼────────────────────────────────────────────────────────────────────┤
│ gasUsed │ 117586 │
├───────────┼────────────────────────────────────────────────────────────────────┤
│ status │ Success │
└───────────┴────────────────────────────────────────────────────────────────────┘
Logs
Fill
contract 0x35dd2932454449b14cee11a94d3674a936d5d7b2
makerAddress 0x5409ed021d9299bf6814279a6a1411a7e866a631
feeRecipientAddress 0x0000000000000000000000000000000000000000
takerAddress 0x6ecbe1db9ef729cbe972c83fb886247691fb6beb
senderAddress 0x6ecbe1db9ef729cbe972c83fb886247691fb6beb
makerAssetFilledAmount 5000000000000000000
takerAssetFilledAmount 100000000000000000
makerFeePaid 0
takerFeePaid 0
orderHash 0x2f25d912d6e5384eb2ab73275c0ba66ff39f7f132ce6b7e5b79be018baa4bcf5
makerAssetData 0xf47261b00000000000000000000000002002d3812f58e35f0ea1ffbf80a75a38c32175fa
takerAssetData 0xf47261b0000000000000000000000000d0a1e359811322d97991e03f863a0c30c2cf029c
Transfer
contract 0x2002d3812f58e35f0ea1ffbf80a75a38c32175fa
_from 0x5409ed021d9299bf6814279a6a1411a7e866a631
_to 0x6ecbe1db9ef729cbe972c83fb886247691fb6beb
_value 5000000000000000000
Transfer
contract 0xd0a1e359811322d97991e03f863a0c30c2cf029c
_from 0x6ecbe1db9ef729cbe972c83fb886247691fb6beb
_to 0x5409ed021d9299bf6814279a6a1411a7e866a631
_value 100000000000000000
Balances
Token Maker Taker
WETH 2.53070141021160417 1.436283635869423603
ZRX 9993.9999945 934.25100549999999803
ETH 2.169765236821913251 0.102247939385971059
✨ Done in 70.05s.
여기서 ganache의 계정 1(0x5409ed021d9299bf6814279a6a1411a7e866a631)이 주문을 만들고 계정 2(0x6ecbe1db9ef729cbe972c83fb886247691fb6) 즉, 계정 1이 Maker이고 계정 2가 Taker입니다. Balance를 보면, Maker의 WETH가 증가하고 있어, Taker의 ZRX가 적게 되어 있는 것을 알 수 있다.
참고 기사
Reference
이 문제에 관하여(0x.js를 사용하여 0x 프로토콜의 스마트 계약 사용 (개요)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/SotaWatanabe/items/d872d2d43d2d5631c5b0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)