0x を動かしてみた (その2)

f:id:simplex-blog:20181225211156p:plain

0x を動かしてみた (その2)

0x Project0x-starter-project を利用してローカル環境で DEX を動かし、実際に ERC20 Token を交換してみました


【実行環境】

・使用した環境のバージョンは以下のとおりです

  • MacOS: 10.13.6
  • node.js: 8.14.0
  • yarn: 1.12.3
  • 0x.js: 2.0.6

0x-starter-project をビルドする

・クローンしたプロジェクトをビルドします

$ git clone https://github.com/0xProject/0x-starter-project.git
$ cd 0x-starter-project
$ yarn install
$ yarn build

Ganache-CLI を起動する

・別のコンソールで Ethereum のローカルノードを立ち上げます

$ yarn download_snapshot
$ yarn ganache-cli

OUTPUT

Ganache CLI v6.1.6 (ganache-core: 2.1.5)

Available Accounts
==================
(0) 0x5409ed021d9299bf6814279a6a1411a7e866a631 (~100 ETH)
(1) 0x6ecbe1db9ef729cbe972c83fb886247691fb6beb (~100 ETH)
(2) 0xe36ea790bc9d7ab70c55260c66d52b1eca985f84 (~100 ETH)
(3) 0xe834ec434daba538cd1b9fe1582052b880bd7e63 (~100 ETH)
(4) 0x78dc5d2d739606d31509c31d654056a45185ecb6 (~100 ETH)
(5) 0xa8dda8d7f5310e4a9e24f8eba77e091ac264f872 (~100 ETH)
(6) 0x06cef8e666768cc40cc78cf93d9611019ddcb628 (~100 ETH)
(7) 0x4404ac8bd8f9618d27ad2f1485aa1b2cfd82482d (~100 ETH)
(8) 0x7457d5e02197480db681d3fdf256c7aca21bdc12 (~100 ETH)
(9) 0x91c987bf62d25945db517bdaa840a6c661374402 (~100 ETH)

Private Keys
==================
(0) 0xf2f48ee19680706196e2e339e5da3491186e0c4c5030670656b0e0164837257d
(1) 0x5d862464fe9303452126c8bc94274b8c5f9874cbd219789b3eb2128075a76f72
(2) 0xdf02719c4df8b9b8ac7f551fcb5d9ef48fa27eef7a66453879f4d8fdc6e78fb1
(3) 0xff12e391b79415e941a94de3bf3a9aee577aed0731e297d5cfa0b8a1e02fa1d0
(4) 0x752dd9cf65e68cfaba7d60225cbdbc1f4729dd5e5507def72815ed0d8abc6249
(5) 0xefb595a0178eb79a8df953f87c5148402a224cdf725e88c0146727c6aceadccd
(6) 0x83c6d2cc5ddcf9711a6d59b417dc20eb48afd58d45290099e5987e3d768f328f
(7) 0xbb2d3f7c9583780a7d3904a2f55d792707c345f21de1bacb2d389934d82796b2
(8) 0xb2fd4d29c1390b71b8795ae81196bfd60293adf99f9d32a0aff06288fcdac55f
(9) 0x23cb7121166b9a2f93ae0b7c05bde02eae50d64449b2cbb42bc84e9d38d6cc89

HD Wallet
==================
Mnemonic:      concert load couple harbor equip island argue ramp clarify fence smart topic
Base HD Path:  m/44'/60'/0'/0/{account_index}

Gas Price
==================
20000000000

Gas Limit
==================
10000000

Listening on 127.0.0.1:8545

MEMO

  • すでに 0x のContract が Deploy された Ganache の Snapshot を使用
  • 10個のアドレスが用意され、それぞれ 100ETH を保有している
  • 1番目のアドレス(0)はさらに 1000000000ZRX と ERC721 Token を1つ保有している
  • ※ZRXは 0x のERC20 Tokenのこと

ERC20 Token を交換してみる

・ERC20 を交換するサンプルコードを実行します

$ yarn scenario:fill_order_erc20

OUTPUT

┌────────────┐
│ Fill Order │
└────────────┘
Accounts
Maker     0x5409ed021d9299bf6814279a6a1411a7e866a631
Taker     0x6ecbe1db9ef729cbe972c83fb886247691fb6beb
Setup
Maker ZRX Approval   0xdfe2bd92834af80306de7f25b20b4b62f54a736b5791d8103676f82e0c6998ce
Taker WETH Approval  0x8c1338beeeb197274213c387b69dfd00e3847aecc9afc253e67e459126e7bfde
Taker WETH Deposit   0x9ccbd69f219f13910b29c6a2724a7fa46b07fea80e081db4defa7980b7a5c5d2
Order
exchangeAddress        0x48bacb9266a570d521063ef5dd96e61686dbe788
makerAddress           0x5409ed021d9299bf6814279a6a1411a7e866a631
takerAddress           0x0000000000000000000000000000000000000000
senderAddress          0x0000000000000000000000000000000000000000
feeRecipientAddress    0x0000000000000000000000000000000000000000
expirationTimeSeconds  1544517147
salt                   5452599843738072208439186242683761774411481802261297353445708046405438448…
makerAssetAmount       5000000000000000000
takerAssetAmount       100000000000000000
makerAssetData         0xf47261b0000000000000000000000000871dd7c2b4b25e1aa18728e9d5f2af4c4e431f5c
takerAssetData         0xf47261b00000000000000000000000000b1ba0af832d7c05fd64161e0db78e85978e8082
makerFee               0
takerFee               0

Allowances
Token  Maker     Taker
WETH   0         MAX_UINT
ZRX    MAX_UINT  0

Balances
Token  Maker                  Taker
WETH   0                      0.1
ZRX    1000000000             0
ETH    99.999058519975432942  99.89819228

Transaction
┌───────────┬────────────────────────────────────────────────────────────────────┐
│ fillOrder │ 0xfa071354359f9799b708030fccee7dd275af87ccfff03cb86f1c8105bcb9e6f2 │
├───────────┼────────────────────────────────────────────────────────────────────┤
│ orderHash │ 0x012f1c138307fca2364eb7fcccd7a175050188468338b7530e7eb55fc8f13acb │
├───────────┼────────────────────────────────────────────────────────────────────┤
│ gasUsed   │ 141812                                                             │
├───────────┼────────────────────────────────────────────────────────────────────┤
│ status    │ Success                                                            │
└───────────┴────────────────────────────────────────────────────────────────────┘

Logs
Fill
contract                0x48bacb9266a570d521063ef5dd96e61686dbe788
makerAddress            0x5409ed021d9299bf6814279a6a1411a7e866a631
feeRecipientAddress     0x0000000000000000000000000000000000000000
takerAddress            0x6ecbe1db9ef729cbe972c83fb886247691fb6beb
senderAddress           0x6ecbe1db9ef729cbe972c83fb886247691fb6beb
makerAssetFilledAmount  5000000000000000000
takerAssetFilledAmount  100000000000000000
makerFeePaid            0
takerFeePaid            0
orderHash               0x012f1c138307fca2364eb7fcccd7a175050188468338b7530e7eb55fc8f13acb
makerAssetData          0xf47261b0000000000000000000000000871dd7c2b4b25e1aa18728e9d5f2af4c4e431f5c
takerAssetData          0xf47261b00000000000000000000000000b1ba0af832d7c05fd64161e0db78e85978e8082
Transfer
contract  0x871dd7c2b4b25e1aa18728e9d5f2af4c4e431f5c
_from     0x5409ed021d9299bf6814279a6a1411a7e866a631
_to       0x6ecbe1db9ef729cbe972c83fb886247691fb6beb
_value    5000000000000000000
Transfer
contract  0x0b1ba0af832d7c05fd64161e0db78e85978e8082
_from     0x6ecbe1db9ef729cbe972c83fb886247691fb6beb
_to       0x5409ed021d9299bf6814279a6a1411a7e866a631
_value    100000000000000000

Balances
Token  Maker                  Taker
WETH   0.1                    0
ZRX    999999995              5
ETH    99.999058519975432942  99.89535604

MEMO

  • Maker [1番目のアドレス : 0x5409ed021d9299bf6814279a6a1411a7e866a631] は、保有する ZRX のうち 5ZRX を 0.1 WETH と交換する注文を出す
  • Taker [2番目のアドレス : 0x6ecbe1db9ef729cbe972c83fb886247691fb6beb] は、その注文に応じる
  • Taker が支払う WETH は ETH から自動的に変換される
  • ここでは OrderBook には記録せず、作成した Order をそのまま Fill している

次回

0x Project0x-starter-project を動かして、ERC721 Token の交換と、簡易 SRA Server 経由での ERC20 Token の交換をしてみます