merge v2-prototype
This commit is contained in:
commit
271fa26890
@ -30,7 +30,7 @@
|
|||||||
"stage_docs": "wsrun docs:stage $PKG --fast-exit --parallel --exclude-missing",
|
"stage_docs": "wsrun docs:stage $PKG --fast-exit --parallel --exclude-missing",
|
||||||
"lint": "wsrun lint $PKG --fast-exit --parallel --exclude-missing",
|
"lint": "wsrun lint $PKG --fast-exit --parallel --exclude-missing",
|
||||||
"comment:postinstall": "HACK: For some reason `yarn` is not setting up symlinks properly for order-utils. We temporarily set them manually. Remove this after V2 refactor is complete.",
|
"comment:postinstall": "HACK: For some reason `yarn` is not setting up symlinks properly for order-utils. We temporarily set them manually. Remove this after V2 refactor is complete.",
|
||||||
"postinstall": "rm -rf `pwd`/packages/order-utils/node_modules/@0xproject; mkdir `pwd`/packages/order-utils/node_modules/@0xproject; ln -s `pwd`/packages/json-schemas `pwd`/packages/order-utils/node_modules/@0xproject/json-schemas; ln -s `pwd`/packages/types `pwd`/packages/order-utils/node_modules/@0xproject/types; rm -f `pwd`/packages/contracts/node_modules/@0xproject/types; ln -s `pwd`/packages/types `pwd`/packages/contracts/node_modules/@0xproject/types"
|
"postinstall": "rm -rf `pwd`/packages/order-utils/node_modules/@0xproject; mkdir `pwd`/packages/order-utils/node_modules/@0xproject; ln -s `pwd`/packages/json-schemas `pwd`/packages/order-utils/node_modules/@0xproject/json-schemas; ln -s `pwd`/packages/types `pwd`/packages/order-utils/node_modules/@0xproject/types; rm -f `pwd`/packages/contracts/node_modules/@0xproject/types; ln -s `pwd`/packages/types `pwd`/packages/contracts/node_modules/@0xproject/types; mkdir -p `pwd`/packages/fill-scenarios/node_modules/@0xproject; ln -s `pwd`/packages/types `pwd`/packages/fill-scenarios/node_modules/@0xproject/types; ln -s `pwd`/packages/order-utils `pwd`/packages/fill-scenarios/node_modules/@0xproject/order-utils"
|
||||||
},
|
},
|
||||||
"config": {
|
"config": {
|
||||||
"mnemonic": "concert load couple harbor equip island argue ramp clarify fence smart topic"
|
"mnemonic": "concert load couple harbor equip island argue ramp clarify fence smart topic"
|
||||||
|
@ -21,13 +21,13 @@
|
|||||||
"generate_contract_wrappers": "abi-gen --abis 'src/compact_artifacts/@(Exchange|Token|TokenTransferProxy|EtherToken|TokenRegistry|DummyToken).json' --template ../contract_templates/contract.handlebars --partials '../contract_templates/partials/**/*.handlebars' --output src/contract_wrappers/generated --backend ethers && prettier --write 'src/contract_wrappers/generated/**.ts'",
|
"generate_contract_wrappers": "abi-gen --abis 'src/compact_artifacts/@(Exchange|Token|TokenTransferProxy|EtherToken|TokenRegistry|DummyToken).json' --template ../contract_templates/contract.handlebars --partials '../contract_templates/partials/**/*.handlebars' --output src/contract_wrappers/generated --backend ethers && prettier --write 'src/contract_wrappers/generated/**.ts'",
|
||||||
"lint": "tslint --project . --exclude **/src/contract_wrappers/generated/**/*",
|
"lint": "tslint --project . --exclude **/src/contract_wrappers/generated/**/*",
|
||||||
"test:circleci": "run-s test:coverage",
|
"test:circleci": "run-s test:coverage",
|
||||||
"test": "run-s clean test:commonjs",
|
"test": "yarn run_mocha",
|
||||||
|
"rebuild_and_test": "run-s build test",
|
||||||
"test:coverage": "nyc npm run test --all && yarn coverage:report:lcov",
|
"test:coverage": "nyc npm run test --all && yarn coverage:report:lcov",
|
||||||
"coverage:report:lcov": "nyc report --reporter=text-lcov > coverage/lcov.info",
|
"coverage:report:lcov": "nyc report --reporter=text-lcov > coverage/lcov.info",
|
||||||
"clean": "shx rm -rf _bundles lib test_temp scripts src/contract_wrappers/generated",
|
"clean": "shx rm -rf _bundles lib test_temp scripts src/contract_wrappers/generated",
|
||||||
"build:umd:prod": "NODE_ENV=production webpack",
|
"build:umd:prod": "NODE_ENV=production webpack",
|
||||||
"build:commonjs": "tsc && copyfiles -u 2 './src/compact_artifacts/**/*.json' ./lib/src/compact_artifacts && copyfiles -u 3 './lib/src/monorepo_scripts/**/*' ./scripts",
|
"build:commonjs": "tsc && copyfiles -u 2 './src/compact_artifacts/**/*.json' ./lib/src/compact_artifacts && copyfiles -u 3 './lib/src/monorepo_scripts/**/*' ./scripts",
|
||||||
"test:commonjs": "run-s build:commonjs run_mocha",
|
|
||||||
"run_mocha": "mocha lib/test/**/*_test.js lib/test/global_hooks.js --timeout 10000 --bail --exit",
|
"run_mocha": "mocha lib/test/**/*_test.js lib/test/global_hooks.js --timeout 10000 --bail --exit",
|
||||||
"manual:postpublish": "yarn build; node ./scripts/postpublish.js",
|
"manual:postpublish": "yarn build; node ./scripts/postpublish.js",
|
||||||
"docs:stage": "node scripts/stage_docs.js",
|
"docs:stage": "node scripts/stage_docs.js",
|
||||||
|
@ -4,8 +4,7 @@ This package allows you to generate TypeScript contract wrappers from ABI files.
|
|||||||
It's heavily inspired by [Geth abigen](https://github.com/ethereum/go-ethereum/wiki/Native-DApps:-Go-bindings-to-Ethereum-contracts) but takes a different approach.
|
It's heavily inspired by [Geth abigen](https://github.com/ethereum/go-ethereum/wiki/Native-DApps:-Go-bindings-to-Ethereum-contracts) but takes a different approach.
|
||||||
You can write your custom handlebars templates which will allow you to seamlessly integrate the generated code into your existing codebase with existing conventions.
|
You can write your custom handlebars templates which will allow you to seamlessly integrate the generated code into your existing codebase with existing conventions.
|
||||||
|
|
||||||
For an example of the generated [wrapper files](https://github.com/0xProject/0x-monorepo/tree/development/packages/0x.js/src/contract_wrappers/generated) check out 0x.js.
|
[Here](https://github.com/0xProject/0x-monorepo/tree/development/packages/0x.js/contract_templates) are the templates used to generate the contract wrappers used by 0x.js.e
|
||||||
[Here](https://github.com/0xProject/0x-monorepo/tree/development/packages/0x.js/contract_templates) are the templates used to generate those files.
|
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
@ -45,7 +44,7 @@ You need to also specify the location of your main template used for every contr
|
|||||||
|
|
||||||
## How to write custom templates?
|
## How to write custom templates?
|
||||||
|
|
||||||
The best way to get started is to copy [0x.js templates](https://github.com/0xProject/0x-monorepo/tree/development/packages/0x.js/contract_templates) and start adjusting them for your needs.
|
The best way to get started is to copy [0x.js templates](https://github.com/0xProject/0x-monorepo/tree/development/packages/contract_templates) and start adjusting them for your needs.
|
||||||
We use [handlebars](http://handlebarsjs.com/) template engine under the hood.
|
We use [handlebars](http://handlebarsjs.com/) template engine under the hood.
|
||||||
You need to have a master template called `contract.mustache`. it will be used to generate each contract wrapper. Although - you don't need and probably shouldn't write all your logic in a single template file. You can write [partial templates](http://handlebarsjs.com/partials.html) and as long as they are within a partials folder - they will be registered and available.
|
You need to have a master template called `contract.mustache`. it will be used to generate each contract wrapper. Although - you don't need and probably shouldn't write all your logic in a single template file. You can write [partial templates](http://handlebarsjs.com/partials.html) and as long as they are within a partials folder - they will be registered and available.
|
||||||
|
|
||||||
|
@ -14,7 +14,8 @@
|
|||||||
"lint": "tslint --project .",
|
"lint": "tslint --project .",
|
||||||
"run_mocha": "mocha lib/test/**/*_test.js --exit",
|
"run_mocha": "mocha lib/test/**/*_test.js --exit",
|
||||||
"prepublishOnly": "run-p build",
|
"prepublishOnly": "run-p build",
|
||||||
"test": "run-s clean build run_mocha",
|
"test": "yarn run_mocha",
|
||||||
|
"rebuild_and_test": "run-s clean build test",
|
||||||
"test:coverage": "nyc npm run test --all && yarn coverage:report:lcov",
|
"test:coverage": "nyc npm run test --all && yarn coverage:report:lcov",
|
||||||
"coverage:report:lcov": "nyc report --reporter=text-lcov > coverage/lcov.info",
|
"coverage:report:lcov": "nyc report --reporter=text-lcov > coverage/lcov.info",
|
||||||
"test:circleci": "yarn test:coverage",
|
"test:circleci": "yarn test:coverage",
|
||||||
|
@ -11,7 +11,8 @@
|
|||||||
"watch": "tsc -w",
|
"watch": "tsc -w",
|
||||||
"build": "tsc && copyfiles -u 2 './lib/monorepo_scripts/**/*' ./scripts",
|
"build": "tsc && copyfiles -u 2 './lib/monorepo_scripts/**/*' ./scripts",
|
||||||
"clean": "shx rm -rf lib scripts",
|
"clean": "shx rm -rf lib scripts",
|
||||||
"test": "run-s clean build run_mocha",
|
"test": "yarn run_mocha",
|
||||||
|
"rebuild_and_test": "run-s clean build test",
|
||||||
"test:circleci": "yarn test:coverage",
|
"test:circleci": "yarn test:coverage",
|
||||||
"run_mocha": "mocha lib/test/**/*_test.js --bail --exit",
|
"run_mocha": "mocha lib/test/**/*_test.js --bail --exit",
|
||||||
"test:coverage": "nyc npm run test --all && yarn coverage:report:lcov",
|
"test:coverage": "nyc npm run test --all && yarn coverage:report:lcov",
|
||||||
|
@ -21,7 +21,8 @@
|
|||||||
"copy_test_fixtures": "copyfiles -u 2 './test/fixtures/**/*.json' ./lib/test/fixtures",
|
"copy_test_fixtures": "copyfiles -u 2 './test/fixtures/**/*.json' ./lib/test/fixtures",
|
||||||
"lint": "tslint --project .",
|
"lint": "tslint --project .",
|
||||||
"run_mocha": "mocha lib/test/**/*_test.js --exit",
|
"run_mocha": "mocha lib/test/**/*_test.js --exit",
|
||||||
"test": "run-s clean build copy_test_fixtures run_mocha",
|
"test": "run-s copy_test_fixtures run_mocha",
|
||||||
|
"rebuild_and_test": "run-s clean build test",
|
||||||
"test:coverage": "nyc npm run test --all && yarn coverage:report:lcov",
|
"test:coverage": "nyc npm run test --all && yarn coverage:report:lcov",
|
||||||
"coverage:report:lcov": "nyc report --reporter=text-lcov > coverage/lcov.info",
|
"coverage:report:lcov": "nyc report --reporter=text-lcov > coverage/lcov.info",
|
||||||
"test:circleci": "yarn test:coverage",
|
"test:circleci": "yarn test:coverage",
|
||||||
|
@ -16,7 +16,8 @@
|
|||||||
"generate_contract_wrappers": "abi-gen --abis 'src/compact_artifacts/@(Exchange|Token|TokenTransferProxy|EtherToken|TokenRegistry|DummyToken).json' --template ../contract_templates/contract.handlebars --partials '../contract_templates/partials/**/*.handlebars' --output src/contract_wrappers/generated --backend ethers && prettier --write 'src/contract_wrappers/generated/**.ts'",
|
"generate_contract_wrappers": "abi-gen --abis 'src/compact_artifacts/@(Exchange|Token|TokenTransferProxy|EtherToken|TokenRegistry|DummyToken).json' --template ../contract_templates/contract.handlebars --partials '../contract_templates/partials/**/*.handlebars' --output src/contract_wrappers/generated --backend ethers && prettier --write 'src/contract_wrappers/generated/**.ts'",
|
||||||
"lint": "tslint --project .",
|
"lint": "tslint --project .",
|
||||||
"test:circleci": "run-s test:coverage",
|
"test:circleci": "run-s test:coverage",
|
||||||
"test": "run-s clean build run_mocha",
|
"test": "yarn run_mocha",
|
||||||
|
"rebuild_and_test": "run-s build test",
|
||||||
"test:coverage": "nyc npm run test --all && yarn coverage:report:lcov",
|
"test:coverage": "nyc npm run test --all && yarn coverage:report:lcov",
|
||||||
"coverage:report:lcov": "nyc report --reporter=text-lcov > coverage/lcov.info",
|
"coverage:report:lcov": "nyc report --reporter=text-lcov > coverage/lcov.info",
|
||||||
"update_artifacts": "for i in ${npm_package_config_contracts}; do copyfiles -u 4 ../migrations/artifacts/1.0.0/$i.json test/artifacts; done;",
|
"update_artifacts": "for i in ${npm_package_config_contracts}; do copyfiles -u 4 ../migrations/artifacts/1.0.0/$i.json test/artifacts; done;",
|
||||||
|
@ -154,7 +154,7 @@ export interface MethodOpts {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* gasPrice: Gas price in Wei to use for a transaction
|
* gasPrice: Gas price in Wei to use for a transaction
|
||||||
* gasLimit: The amount of gas to send with a transaction
|
* gasLimit: The amount of gas to send with a transaction (in Gwei)
|
||||||
*/
|
*/
|
||||||
export interface TransactionOpts {
|
export interface TransactionOpts {
|
||||||
gasPrice?: BigNumber;
|
gasPrice?: BigNumber;
|
||||||
|
@ -15,7 +15,8 @@
|
|||||||
"prebuild": "run-s clean compile copy_artifacts generate_contract_wrappers",
|
"prebuild": "run-s clean compile copy_artifacts generate_contract_wrappers",
|
||||||
"copy_artifacts": "copyfiles -u 4 '../migrations/artifacts/2.0.0/**/*' ./lib/src/artifacts;",
|
"copy_artifacts": "copyfiles -u 4 '../migrations/artifacts/2.0.0/**/*' ./lib/src/artifacts;",
|
||||||
"build": "tsc",
|
"build": "tsc",
|
||||||
"test": "run-s build run_mocha",
|
"test": "yarn run_mocha",
|
||||||
|
"rebuild_and_test": "run-s build test",
|
||||||
"test:coverage": "SOLIDITY_COVERAGE=true run-s build run_mocha coverage:report:text coverage:report:lcov",
|
"test:coverage": "SOLIDITY_COVERAGE=true run-s build run_mocha coverage:report:text coverage:report:lcov",
|
||||||
"run_mocha": "mocha 'lib/test/**/*.js' --timeout 100000 --bail --exit",
|
"run_mocha": "mocha 'lib/test/**/*.js' --timeout 100000 --bail --exit",
|
||||||
"compile": "sol-compiler",
|
"compile": "sol-compiler",
|
||||||
|
@ -10,7 +10,8 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"watch": "tsc -w",
|
"watch": "tsc -w",
|
||||||
"build": "tsc && copyfiles -u 3 './lib/src/monorepo_scripts/**/*' ./scripts",
|
"build": "tsc && copyfiles -u 3 './lib/src/monorepo_scripts/**/*' ./scripts",
|
||||||
"test": "run-s clean build run_mocha",
|
"test": "yarn run_mocha",
|
||||||
|
"rebuild_and_test": "run-s clean build test",
|
||||||
"test:circleci": "yarn test:coverage",
|
"test:circleci": "yarn test:coverage",
|
||||||
"run_mocha": "mocha lib/test/**/*_test.js --bail --exit",
|
"run_mocha": "mocha lib/test/**/*_test.js --bail --exit",
|
||||||
"test:coverage": "nyc npm run test --all && yarn coverage:report:lcov",
|
"test:coverage": "nyc npm run test --all && yarn coverage:report:lcov",
|
||||||
|
@ -1,4 +1,13 @@
|
|||||||
[
|
[
|
||||||
|
{
|
||||||
|
"version": "0.1.0",
|
||||||
|
"changes": [
|
||||||
|
{
|
||||||
|
"note": "Make fill-scenarios compatible with V2 of 0x protocol",
|
||||||
|
"pr": 656
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"timestamp": 1527008544,
|
"timestamp": 1527008544,
|
||||||
"version": "0.0.2",
|
"version": "0.0.2",
|
||||||
|
@ -1,18 +1,23 @@
|
|||||||
{
|
{
|
||||||
"name": "@0xproject/fill-scenarios",
|
"name": "@0xproject/fill-scenarios",
|
||||||
"version": "0.0.2",
|
"version": "1.0.0",
|
||||||
"description": "0x order fill scenario generator",
|
"description": "0x order fill scenario generator",
|
||||||
"main": "lib/index.js",
|
"main": "lib/index.js",
|
||||||
"types": "lib/index.d.ts",
|
"types": "lib/index.d.ts",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"watch": "tsc -w",
|
"watch": "yarn update_contract_wrappers && tsc -w",
|
||||||
"prebuild": "run-s clean generate_contract_wrappers",
|
"build": "yarn update_contract_wrappers && tsc",
|
||||||
"generate_contract_wrappers": "abi-gen --abis 'src/compact_artifacts/@(Exchange|Token|TokenTransferProxy|EtherToken|DummyToken).json' --template ../contract_templates/contract.handlebars --partials '../contract_templates/partials/**/*.handlebars' --output src/generated_contract_wrappers --backend ethers && prettier --write 'src/generated_contract_wrappers/**.ts'",
|
"update_contract_wrappers": "run-s clean update_artifacts generate_contract_wrappers",
|
||||||
"build": "tsc && copyfiles -u 2 './src/compact_artifacts/**/*.json' ./lib/compact_artifacts && copyfiles -u 3 './lib/src/monorepo_scripts/**/*' ./scripts",
|
"update_artifacts": "for i in ${npm_package_config_contracts}; do copyfiles -u 4 ../migrations/artifacts/2.0.0/$i.json lib/artifacts; done;",
|
||||||
|
"generate_contract_wrappers": "abi-gen --abis 'lib/artifacts/@(Exchange|ERC20Token|DummyERC20Token).json' --template ../contract_templates/contract.handlebars --partials '../contract_templates/partials/**/*.handlebars' --output src/generated_contract_wrappers --backend ethers && prettier --write 'src/generated_contract_wrappers/**.ts'",
|
||||||
|
"copy_monorepo_scripts": "copyfiles -u 3 './lib/src/monorepo_scripts/**/*' ./scripts",
|
||||||
"clean": "shx rm -rf lib scripts src/generated_contract_wrappers",
|
"clean": "shx rm -rf lib scripts src/generated_contract_wrappers",
|
||||||
"lint": "tslint --project . --exclude **/src/generated_contract_wrappers/**/*",
|
"lint": "tslint --project . --exclude **/src/generated_contract_wrappers/**/*",
|
||||||
"manual:postpublish": "yarn build; node ./scripts/postpublish.js"
|
"manual:postpublish": "yarn build; node ./scripts/postpublish.js"
|
||||||
},
|
},
|
||||||
|
"config": {
|
||||||
|
"contracts": "Exchange ERC20Token DummyERC20Token"
|
||||||
|
},
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
@ -37,8 +42,8 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@0xproject/base-contract": "^0.3.2",
|
"@0xproject/base-contract": "^0.3.2",
|
||||||
"@0xproject/order-utils": "0.0.5",
|
"@0xproject/order-utils": "^0.0.6",
|
||||||
"@0xproject/types": "0.7.0",
|
"@0xproject/types": "1.0.0",
|
||||||
"ethereum-types": "^0.0.1",
|
"ethereum-types": "^0.0.1",
|
||||||
"@0xproject/typescript-typings": "^0.3.2",
|
"@0xproject/typescript-typings": "^0.3.2",
|
||||||
"@0xproject/utils": "^0.6.2",
|
"@0xproject/utils": "^0.6.2",
|
||||||
|
@ -1,22 +0,0 @@
|
|||||||
{
|
|
||||||
"contract_name": "DummyToken",
|
|
||||||
"abi": [
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_target",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "setBalance",
|
|
||||||
"outputs": [],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
@ -1,287 +0,0 @@
|
|||||||
{
|
|
||||||
"contract_name": "EtherToken",
|
|
||||||
"abi": [
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [],
|
|
||||||
"name": "name",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_spender",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "approve",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [],
|
|
||||||
"name": "totalSupply",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_from",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_to",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "transferFrom",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "amount",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "withdraw",
|
|
||||||
"outputs": [],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [],
|
|
||||||
"name": "decimals",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "uint8"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_owner",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "balanceOf",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [],
|
|
||||||
"name": "symbol",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_to",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "transfer",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [],
|
|
||||||
"name": "deposit",
|
|
||||||
"outputs": [],
|
|
||||||
"payable": true,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_owner",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_spender",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "allowance",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"payable": true,
|
|
||||||
"type": "fallback"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_from",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_to",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "Transfer",
|
|
||||||
"type": "event"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_owner",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_spender",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "Approval",
|
|
||||||
"type": "event"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_owner",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "Deposit",
|
|
||||||
"type": "event"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_owner",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "Withdrawal",
|
|
||||||
"type": "event"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"networks": {
|
|
||||||
"1": {
|
|
||||||
"address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
|
|
||||||
},
|
|
||||||
"3": {
|
|
||||||
"address": "0xc00fd9820cd2898cc4c054b7bf142de637ad129a"
|
|
||||||
},
|
|
||||||
"4": {
|
|
||||||
"address": "0xc778417e063141139fce010982780140aa0cd5ab"
|
|
||||||
},
|
|
||||||
"42": {
|
|
||||||
"address": "0x653e49e301e508a13237c0ddc98ae7d4cd2667a1"
|
|
||||||
},
|
|
||||||
"50": {
|
|
||||||
"address": "0x871dd7c2b4b25e1aa18728e9d5f2af4c4e431f5c"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,610 +0,0 @@
|
|||||||
{
|
|
||||||
"contract_name": "Exchange",
|
|
||||||
"abi": [
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "numerator",
|
|
||||||
"type": "uint256"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "denominator",
|
|
||||||
"type": "uint256"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "target",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "isRoundingError",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "bytes32"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "filled",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "bytes32"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "cancelled",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "orderAddresses",
|
|
||||||
"type": "address[5][]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "orderValues",
|
|
||||||
"type": "uint256[6][]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "fillTakerTokenAmount",
|
|
||||||
"type": "uint256"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "shouldThrowOnInsufficientBalanceOrAllowance",
|
|
||||||
"type": "bool"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "v",
|
|
||||||
"type": "uint8[]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "r",
|
|
||||||
"type": "bytes32[]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "s",
|
|
||||||
"type": "bytes32[]"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "fillOrdersUpTo",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "orderAddresses",
|
|
||||||
"type": "address[5]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "orderValues",
|
|
||||||
"type": "uint256[6]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "cancelTakerTokenAmount",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "cancelOrder",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [],
|
|
||||||
"name": "ZRX_TOKEN_CONTRACT",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "orderAddresses",
|
|
||||||
"type": "address[5][]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "orderValues",
|
|
||||||
"type": "uint256[6][]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "fillTakerTokenAmounts",
|
|
||||||
"type": "uint256[]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "v",
|
|
||||||
"type": "uint8[]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "r",
|
|
||||||
"type": "bytes32[]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "s",
|
|
||||||
"type": "bytes32[]"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "batchFillOrKillOrders",
|
|
||||||
"outputs": [],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "orderAddresses",
|
|
||||||
"type": "address[5]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "orderValues",
|
|
||||||
"type": "uint256[6]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "fillTakerTokenAmount",
|
|
||||||
"type": "uint256"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "v",
|
|
||||||
"type": "uint8"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "r",
|
|
||||||
"type": "bytes32"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "s",
|
|
||||||
"type": "bytes32"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "fillOrKillOrder",
|
|
||||||
"outputs": [],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "orderHash",
|
|
||||||
"type": "bytes32"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "getUnavailableTakerTokenAmount",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "signer",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "hash",
|
|
||||||
"type": "bytes32"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "v",
|
|
||||||
"type": "uint8"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "r",
|
|
||||||
"type": "bytes32"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "s",
|
|
||||||
"type": "bytes32"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "isValidSignature",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "numerator",
|
|
||||||
"type": "uint256"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "denominator",
|
|
||||||
"type": "uint256"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "target",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "getPartialAmount",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [],
|
|
||||||
"name": "TOKEN_TRANSFER_PROXY_CONTRACT",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "orderAddresses",
|
|
||||||
"type": "address[5][]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "orderValues",
|
|
||||||
"type": "uint256[6][]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "fillTakerTokenAmounts",
|
|
||||||
"type": "uint256[]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "shouldThrowOnInsufficientBalanceOrAllowance",
|
|
||||||
"type": "bool"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "v",
|
|
||||||
"type": "uint8[]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "r",
|
|
||||||
"type": "bytes32[]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "s",
|
|
||||||
"type": "bytes32[]"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "batchFillOrders",
|
|
||||||
"outputs": [],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "orderAddresses",
|
|
||||||
"type": "address[5][]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "orderValues",
|
|
||||||
"type": "uint256[6][]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "cancelTakerTokenAmounts",
|
|
||||||
"type": "uint256[]"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "batchCancelOrders",
|
|
||||||
"outputs": [],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "orderAddresses",
|
|
||||||
"type": "address[5]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "orderValues",
|
|
||||||
"type": "uint256[6]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "fillTakerTokenAmount",
|
|
||||||
"type": "uint256"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "shouldThrowOnInsufficientBalanceOrAllowance",
|
|
||||||
"type": "bool"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "v",
|
|
||||||
"type": "uint8"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "r",
|
|
||||||
"type": "bytes32"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "s",
|
|
||||||
"type": "bytes32"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "fillOrder",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "filledTakerTokenAmount",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "orderAddresses",
|
|
||||||
"type": "address[5]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "orderValues",
|
|
||||||
"type": "uint256[6]"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "getOrderHash",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "bytes32"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [],
|
|
||||||
"name": "EXTERNAL_QUERY_GAS_LIMIT",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "uint16"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [],
|
|
||||||
"name": "VERSION",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_zrxToken",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_tokenTransferProxy",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "constructor"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "maker",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "taker",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "feeRecipient",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "makerToken",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "takerToken",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "filledMakerTokenAmount",
|
|
||||||
"type": "uint256"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "filledTakerTokenAmount",
|
|
||||||
"type": "uint256"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "paidMakerFee",
|
|
||||||
"type": "uint256"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "paidTakerFee",
|
|
||||||
"type": "uint256"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "tokens",
|
|
||||||
"type": "bytes32"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "orderHash",
|
|
||||||
"type": "bytes32"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "LogFill",
|
|
||||||
"type": "event"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "maker",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "feeRecipient",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "makerToken",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "takerToken",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "cancelledMakerTokenAmount",
|
|
||||||
"type": "uint256"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "cancelledTakerTokenAmount",
|
|
||||||
"type": "uint256"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "tokens",
|
|
||||||
"type": "bytes32"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "orderHash",
|
|
||||||
"type": "bytes32"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "LogCancel",
|
|
||||||
"type": "event"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "errorId",
|
|
||||||
"type": "uint8"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "orderHash",
|
|
||||||
"type": "bytes32"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "LogError",
|
|
||||||
"type": "event"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"networks": {
|
|
||||||
"1": {
|
|
||||||
"address": "0x12459c951127e0c374ff9105dda097662a027093"
|
|
||||||
},
|
|
||||||
"3": {
|
|
||||||
"address": "0x479cc461fecd078f766ecc58533d6f69580cf3ac"
|
|
||||||
},
|
|
||||||
"4": {
|
|
||||||
"address": "0x1d16ef40fac01cec8adac2ac49427b9384192c05"
|
|
||||||
},
|
|
||||||
"42": {
|
|
||||||
"address": "0x90fe2af704b34e0224bf2299c838e04d4dcf1364"
|
|
||||||
},
|
|
||||||
"50": {
|
|
||||||
"address": "0x48bacb9266a570d521063ef5dd96e61686dbe788"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,172 +0,0 @@
|
|||||||
{
|
|
||||||
"contract_name": "Token",
|
|
||||||
"abi": [
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_spender",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "approve",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "success",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [],
|
|
||||||
"name": "totalSupply",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "supply",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_from",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_to",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "transferFrom",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "success",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_owner",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "balanceOf",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "balance",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_to",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "transfer",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "success",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_owner",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_spender",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "allowance",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "remaining",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_from",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_to",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "Transfer",
|
|
||||||
"type": "event"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_owner",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_spender",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "Approval",
|
|
||||||
"type": "event"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
@ -1,547 +0,0 @@
|
|||||||
{
|
|
||||||
"contract_name": "TokenRegistry",
|
|
||||||
"abi": [
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_token",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_index",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "removeToken",
|
|
||||||
"outputs": [],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_name",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "getTokenAddressByName",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_symbol",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "getTokenAddressBySymbol",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_token",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_swarmHash",
|
|
||||||
"type": "bytes"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "setTokenSwarmHash",
|
|
||||||
"outputs": [],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_token",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "getTokenMetaData",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "uint8"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "bytes"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "bytes"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [],
|
|
||||||
"name": "owner",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_token",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_name",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_symbol",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_decimals",
|
|
||||||
"type": "uint8"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_ipfsHash",
|
|
||||||
"type": "bytes"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_swarmHash",
|
|
||||||
"type": "bytes"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "addToken",
|
|
||||||
"outputs": [],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_token",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_name",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "setTokenName",
|
|
||||||
"outputs": [],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "tokens",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "token",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "name",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "symbol",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "decimals",
|
|
||||||
"type": "uint8"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "ipfsHash",
|
|
||||||
"type": "bytes"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "swarmHash",
|
|
||||||
"type": "bytes"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "tokenAddresses",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_name",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "getTokenByName",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "uint8"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "bytes"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "bytes"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [],
|
|
||||||
"name": "getTokenAddresses",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "address[]"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_token",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_ipfsHash",
|
|
||||||
"type": "bytes"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "setTokenIpfsHash",
|
|
||||||
"outputs": [],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_symbol",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "getTokenBySymbol",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "uint8"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "bytes"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "bytes"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_token",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_symbol",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "setTokenSymbol",
|
|
||||||
"outputs": [],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "newOwner",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "transferOwnership",
|
|
||||||
"outputs": [],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "token",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "name",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "symbol",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "decimals",
|
|
||||||
"type": "uint8"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "ipfsHash",
|
|
||||||
"type": "bytes"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "swarmHash",
|
|
||||||
"type": "bytes"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "LogAddToken",
|
|
||||||
"type": "event"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "token",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "name",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "symbol",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "decimals",
|
|
||||||
"type": "uint8"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "ipfsHash",
|
|
||||||
"type": "bytes"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "swarmHash",
|
|
||||||
"type": "bytes"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "LogRemoveToken",
|
|
||||||
"type": "event"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "token",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "oldName",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "newName",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "LogTokenNameChange",
|
|
||||||
"type": "event"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "token",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "oldSymbol",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "newSymbol",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "LogTokenSymbolChange",
|
|
||||||
"type": "event"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "token",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "oldIpfsHash",
|
|
||||||
"type": "bytes"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "newIpfsHash",
|
|
||||||
"type": "bytes"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "LogTokenIpfsHashChange",
|
|
||||||
"type": "event"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "token",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "oldSwarmHash",
|
|
||||||
"type": "bytes"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "newSwarmHash",
|
|
||||||
"type": "bytes"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "LogTokenSwarmHashChange",
|
|
||||||
"type": "event"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"networks": {
|
|
||||||
"1": {
|
|
||||||
"address": "0x926a74c5c36adf004c87399e65f75628b0f98d2c"
|
|
||||||
},
|
|
||||||
"3": {
|
|
||||||
"address": "0x6b1a50f0bb5a7995444bd3877b22dc89c62843ed"
|
|
||||||
},
|
|
||||||
"4": {
|
|
||||||
"address": "0x4e9aad8184de8833365fea970cd9149372fdf1e6"
|
|
||||||
},
|
|
||||||
"42": {
|
|
||||||
"address": "0xf18e504561f4347bea557f3d4558f559dddbae7f"
|
|
||||||
},
|
|
||||||
"50": {
|
|
||||||
"address": "0x0b1ba0af832d7c05fd64161e0db78e85978e8082"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,187 +0,0 @@
|
|||||||
{
|
|
||||||
"contract_name": "TokenTransferProxy",
|
|
||||||
"abi": [
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "token",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "from",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "to",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "transferFrom",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "target",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "addAuthorizedAddress",
|
|
||||||
"outputs": [],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "authorities",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "target",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "removeAuthorizedAddress",
|
|
||||||
"outputs": [],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [],
|
|
||||||
"name": "owner",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "authorized",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [],
|
|
||||||
"name": "getAuthorizedAddresses",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "address[]"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "newOwner",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "transferOwnership",
|
|
||||||
"outputs": [],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "target",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "caller",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "LogAuthorizedAddressAdded",
|
|
||||||
"type": "event"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "target",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "caller",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "LogAuthorizedAddressRemoved",
|
|
||||||
"type": "event"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"networks": {
|
|
||||||
"1": {
|
|
||||||
"address": "0x8da0d80f5007ef1e431dd2127178d224e32c2ef4"
|
|
||||||
},
|
|
||||||
"3": {
|
|
||||||
"address": "0x4e9aad8184de8833365fea970cd9149372fdf1e6"
|
|
||||||
},
|
|
||||||
"4": {
|
|
||||||
"address": "0xa8e9fa8f91e5ae138c74648c9c304f1c75003a8d"
|
|
||||||
},
|
|
||||||
"42": {
|
|
||||||
"address": "0x087eed4bc1ee3de49befbd66c662b434b15d49d4"
|
|
||||||
},
|
|
||||||
"50": {
|
|
||||||
"address": "0x1dc4c1cefef38a777b15aa20260a54e584b16c48"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,20 +0,0 @@
|
|||||||
{
|
|
||||||
"contract_name": "ZRX",
|
|
||||||
"networks": {
|
|
||||||
"1": {
|
|
||||||
"address": "0xe41d2489571d322189246dafa5ebde1f4699f498"
|
|
||||||
},
|
|
||||||
"3": {
|
|
||||||
"address": "0xa8e9fa8f91e5ae138c74648c9c304f1c75003a8d"
|
|
||||||
},
|
|
||||||
"4": {
|
|
||||||
"address": "0x00f58d6d585f84b2d7267940cede30ce2fe6eae8"
|
|
||||||
},
|
|
||||||
"42": {
|
|
||||||
"address": "0x6ff6c0ff1d68b964901f986d4c9fa3ac68346570"
|
|
||||||
},
|
|
||||||
"50": {
|
|
||||||
"address": "0x1d7022f5b17d2f8b695918fb48fa1089c9f85401"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,14 +1,15 @@
|
|||||||
import { formatters, orderFactory } from '@0xproject/order-utils';
|
import { assetProxyUtils, orderFactory } from '@0xproject/order-utils';
|
||||||
import { Provider, SignedOrder, Token } from '@0xproject/types';
|
import { OrderWithoutExchangeAddress, SignedOrder, Token } from '@0xproject/types';
|
||||||
import { BigNumber } from '@0xproject/utils';
|
import { BigNumber } from '@0xproject/utils';
|
||||||
import { Web3Wrapper } from '@0xproject/web3-wrapper';
|
import { Web3Wrapper } from '@0xproject/web3-wrapper';
|
||||||
|
import { Provider } from 'ethereum-types';
|
||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
|
|
||||||
import { artifacts } from './artifacts';
|
import { artifacts } from './artifacts';
|
||||||
import { constants } from './constants';
|
import { constants } from './constants';
|
||||||
import { DummyTokenContract } from './generated_contract_wrappers/dummy_token';
|
import { DummyERC20TokenContract } from './generated_contract_wrappers/dummy_e_r_c20_token';
|
||||||
|
import { ERC20TokenContract } from './generated_contract_wrappers/e_r_c20_token';
|
||||||
import { ExchangeContract } from './generated_contract_wrappers/exchange';
|
import { ExchangeContract } from './generated_contract_wrappers/exchange';
|
||||||
import { TokenContract } from './generated_contract_wrappers/token';
|
|
||||||
|
|
||||||
const INITIAL_COINBASE_TOKEN_SUPPLY_IN_UNITS = new BigNumber(100);
|
const INITIAL_COINBASE_TOKEN_SUPPLY_IN_UNITS = new BigNumber(100);
|
||||||
|
|
||||||
@ -18,25 +19,25 @@ export class FillScenarios {
|
|||||||
private _tokens: Token[];
|
private _tokens: Token[];
|
||||||
private _coinbase: string;
|
private _coinbase: string;
|
||||||
private _zrxTokenAddress: string;
|
private _zrxTokenAddress: string;
|
||||||
private _exchangeContractAddress: string;
|
private _exchangeAddress: string;
|
||||||
constructor(
|
constructor(
|
||||||
provider: Provider,
|
provider: Provider,
|
||||||
userAddresses: string[],
|
userAddresses: string[],
|
||||||
tokens: Token[],
|
tokens: Token[],
|
||||||
zrxTokenAddress: string,
|
zrxTokenAddress: string,
|
||||||
exchangeContractAddress: string,
|
exchangeAddress: string,
|
||||||
) {
|
) {
|
||||||
this._web3Wrapper = new Web3Wrapper(provider);
|
this._web3Wrapper = new Web3Wrapper(provider);
|
||||||
this._userAddresses = userAddresses;
|
this._userAddresses = userAddresses;
|
||||||
this._tokens = tokens;
|
this._tokens = tokens;
|
||||||
this._coinbase = userAddresses[0];
|
this._coinbase = userAddresses[0];
|
||||||
this._zrxTokenAddress = zrxTokenAddress;
|
this._zrxTokenAddress = zrxTokenAddress;
|
||||||
this._exchangeContractAddress = exchangeContractAddress;
|
this._exchangeAddress = exchangeAddress;
|
||||||
}
|
}
|
||||||
public async initTokenBalancesAsync(): Promise<void> {
|
public async initTokenBalancesAsync(): Promise<void> {
|
||||||
for (const token of this._tokens) {
|
for (const token of this._tokens) {
|
||||||
if (token.symbol !== 'ZRX' && token.symbol !== 'WETH') {
|
if (token.symbol !== 'ZRX' && token.symbol !== 'WETH') {
|
||||||
const dummyToken = new DummyTokenContract(
|
const dummyERC20Token = new DummyERC20TokenContract(
|
||||||
artifacts.DummyToken.abi,
|
artifacts.DummyToken.abi,
|
||||||
token.address,
|
token.address,
|
||||||
this._web3Wrapper.getProvider(),
|
this._web3Wrapper.getProvider(),
|
||||||
@ -46,7 +47,7 @@ export class FillScenarios {
|
|||||||
INITIAL_COINBASE_TOKEN_SUPPLY_IN_UNITS,
|
INITIAL_COINBASE_TOKEN_SUPPLY_IN_UNITS,
|
||||||
token.decimals,
|
token.decimals,
|
||||||
);
|
);
|
||||||
const txHash = await dummyToken.setBalance.sendTransactionAsync(this._coinbase, tokenSupply, {
|
const txHash = await dummyERC20Token.setBalance.sendTransactionAsync(this._coinbase, tokenSupply, {
|
||||||
from: this._coinbase,
|
from: this._coinbase,
|
||||||
});
|
});
|
||||||
await this._web3Wrapper.awaitTransactionSuccessAsync(txHash);
|
await this._web3Wrapper.awaitTransactionSuccessAsync(txHash);
|
||||||
@ -54,148 +55,152 @@ export class FillScenarios {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
public async createFillableSignedOrderAsync(
|
public async createFillableSignedOrderAsync(
|
||||||
makerTokenAddress: string,
|
makerAssetData: string,
|
||||||
takerTokenAddress: string,
|
takerAssetData: string,
|
||||||
makerAddress: string,
|
makerAddress: string,
|
||||||
takerAddress: string,
|
takerAddress: string,
|
||||||
fillableAmount: BigNumber,
|
fillableAmount: BigNumber,
|
||||||
expirationUnixTimestampSec?: BigNumber,
|
expirationTimeSeconds?: BigNumber,
|
||||||
): Promise<SignedOrder> {
|
): Promise<SignedOrder> {
|
||||||
return this.createAsymmetricFillableSignedOrderAsync(
|
return this.createAsymmetricFillableSignedOrderAsync(
|
||||||
makerTokenAddress,
|
makerAssetData,
|
||||||
takerTokenAddress,
|
takerAssetData,
|
||||||
makerAddress,
|
makerAddress,
|
||||||
takerAddress,
|
takerAddress,
|
||||||
fillableAmount,
|
fillableAmount,
|
||||||
fillableAmount,
|
fillableAmount,
|
||||||
expirationUnixTimestampSec,
|
expirationTimeSeconds,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
public async createFillableSignedOrderWithFeesAsync(
|
public async createFillableSignedOrderWithFeesAsync(
|
||||||
makerTokenAddress: string,
|
makerAssetData: string,
|
||||||
takerTokenAddress: string,
|
takerAssetData: string,
|
||||||
makerFee: BigNumber,
|
makerFee: BigNumber,
|
||||||
takerFee: BigNumber,
|
takerFee: BigNumber,
|
||||||
makerAddress: string,
|
makerAddress: string,
|
||||||
takerAddress: string,
|
takerAddress: string,
|
||||||
fillableAmount: BigNumber,
|
fillableAmount: BigNumber,
|
||||||
feeRecepient: string,
|
feeRecepientAddress: string,
|
||||||
expirationUnixTimestampSec?: BigNumber,
|
expirationTimeSeconds?: BigNumber,
|
||||||
): Promise<SignedOrder> {
|
): Promise<SignedOrder> {
|
||||||
return this._createAsymmetricFillableSignedOrderWithFeesAsync(
|
return this._createAsymmetricFillableSignedOrderWithFeesAsync(
|
||||||
makerTokenAddress,
|
makerAssetData,
|
||||||
takerTokenAddress,
|
takerAssetData,
|
||||||
makerFee,
|
makerFee,
|
||||||
takerFee,
|
takerFee,
|
||||||
makerAddress,
|
makerAddress,
|
||||||
takerAddress,
|
takerAddress,
|
||||||
fillableAmount,
|
fillableAmount,
|
||||||
fillableAmount,
|
fillableAmount,
|
||||||
feeRecepient,
|
feeRecepientAddress,
|
||||||
expirationUnixTimestampSec,
|
expirationTimeSeconds,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
public async createAsymmetricFillableSignedOrderAsync(
|
public async createAsymmetricFillableSignedOrderAsync(
|
||||||
makerTokenAddress: string,
|
makerAssetData: string,
|
||||||
takerTokenAddress: string,
|
takerAssetData: string,
|
||||||
makerAddress: string,
|
makerAddress: string,
|
||||||
takerAddress: string,
|
takerAddress: string,
|
||||||
makerFillableAmount: BigNumber,
|
makerFillableAmount: BigNumber,
|
||||||
takerFillableAmount: BigNumber,
|
takerFillableAmount: BigNumber,
|
||||||
expirationUnixTimestampSec?: BigNumber,
|
expirationTimeSeconds?: BigNumber,
|
||||||
): Promise<SignedOrder> {
|
): Promise<SignedOrder> {
|
||||||
const makerFee = new BigNumber(0);
|
const makerFee = new BigNumber(0);
|
||||||
const takerFee = new BigNumber(0);
|
const takerFee = new BigNumber(0);
|
||||||
const feeRecepient = constants.NULL_ADDRESS;
|
const feeRecepientAddress = constants.NULL_ADDRESS;
|
||||||
return this._createAsymmetricFillableSignedOrderWithFeesAsync(
|
return this._createAsymmetricFillableSignedOrderWithFeesAsync(
|
||||||
makerTokenAddress,
|
makerAssetData,
|
||||||
takerTokenAddress,
|
takerAssetData,
|
||||||
makerFee,
|
makerFee,
|
||||||
takerFee,
|
takerFee,
|
||||||
makerAddress,
|
makerAddress,
|
||||||
takerAddress,
|
takerAddress,
|
||||||
makerFillableAmount,
|
makerFillableAmount,
|
||||||
takerFillableAmount,
|
takerFillableAmount,
|
||||||
feeRecepient,
|
feeRecepientAddress,
|
||||||
expirationUnixTimestampSec,
|
expirationTimeSeconds,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
public async createPartiallyFilledSignedOrderAsync(
|
public async createPartiallyFilledSignedOrderAsync(
|
||||||
makerTokenAddress: string,
|
makerAssetData: string,
|
||||||
takerTokenAddress: string,
|
takerAssetData: string,
|
||||||
takerAddress: string,
|
takerAddress: string,
|
||||||
fillableAmount: BigNumber,
|
fillableAmount: BigNumber,
|
||||||
partialFillAmount: BigNumber,
|
partialFillAmount: BigNumber,
|
||||||
): Promise<SignedOrder> {
|
): Promise<SignedOrder> {
|
||||||
const [makerAddress] = this._userAddresses;
|
const [makerAddress] = this._userAddresses;
|
||||||
const signedOrder = await this.createAsymmetricFillableSignedOrderAsync(
|
const signedOrder = await this.createAsymmetricFillableSignedOrderAsync(
|
||||||
makerTokenAddress,
|
makerAssetData,
|
||||||
takerTokenAddress,
|
takerAssetData,
|
||||||
makerAddress,
|
makerAddress,
|
||||||
takerAddress,
|
takerAddress,
|
||||||
fillableAmount,
|
fillableAmount,
|
||||||
fillableAmount,
|
fillableAmount,
|
||||||
);
|
);
|
||||||
const shouldThrowOnInsufficientBalanceOrAllowance = false;
|
|
||||||
const exchangeInstance = new ExchangeContract(
|
const exchangeInstance = new ExchangeContract(
|
||||||
artifacts.Exchange.abi,
|
artifacts.Exchange.abi,
|
||||||
signedOrder.exchangeContractAddress,
|
signedOrder.exchangeAddress,
|
||||||
this._web3Wrapper.getProvider(),
|
this._web3Wrapper.getProvider(),
|
||||||
this._web3Wrapper.getContractDefaults(),
|
this._web3Wrapper.getContractDefaults(),
|
||||||
);
|
);
|
||||||
|
|
||||||
const [orderAddresses, orderValues] = formatters.getOrderAddressesAndValues(signedOrder);
|
const orderWithoutExchangeAddress = _.omit(signedOrder, [
|
||||||
|
'signature',
|
||||||
|
'exchangeAddress',
|
||||||
|
]) as OrderWithoutExchangeAddress;
|
||||||
|
|
||||||
await exchangeInstance.fillOrder.sendTransactionAsync(
|
await exchangeInstance.fillOrder.sendTransactionAsync(
|
||||||
orderAddresses,
|
orderWithoutExchangeAddress,
|
||||||
orderValues,
|
|
||||||
partialFillAmount,
|
partialFillAmount,
|
||||||
shouldThrowOnInsufficientBalanceOrAllowance,
|
signedOrder.signature,
|
||||||
signedOrder.ecSignature.v,
|
|
||||||
signedOrder.ecSignature.r,
|
|
||||||
signedOrder.ecSignature.s,
|
|
||||||
{ from: takerAddress },
|
{ from: takerAddress },
|
||||||
);
|
);
|
||||||
return signedOrder;
|
return signedOrder;
|
||||||
}
|
}
|
||||||
private async _createAsymmetricFillableSignedOrderWithFeesAsync(
|
private async _createAsymmetricFillableSignedOrderWithFeesAsync(
|
||||||
makerTokenAddress: string,
|
makerAssetData: string,
|
||||||
takerTokenAddress: string,
|
takerAssetData: string,
|
||||||
makerFee: BigNumber,
|
makerFee: BigNumber,
|
||||||
takerFee: BigNumber,
|
takerFee: BigNumber,
|
||||||
makerAddress: string,
|
makerAddress: string,
|
||||||
takerAddress: string,
|
takerAddress: string,
|
||||||
makerFillableAmount: BigNumber,
|
makerFillableAmount: BigNumber,
|
||||||
takerFillableAmount: BigNumber,
|
takerFillableAmount: BigNumber,
|
||||||
feeRecepient: string,
|
feeRecepientAddress: string,
|
||||||
expirationUnixTimestampSec?: BigNumber,
|
expirationTimeSeconds?: BigNumber,
|
||||||
): Promise<SignedOrder> {
|
): Promise<SignedOrder> {
|
||||||
|
const makerERC20ProxyData = assetProxyUtils.decodeERC20ProxyData(makerAssetData);
|
||||||
|
const makerTokenAddress = makerERC20ProxyData.tokenAddress;
|
||||||
|
const takerERC20ProxyData = assetProxyUtils.decodeERC20ProxyData(takerAssetData);
|
||||||
|
const takerTokenAddress = takerERC20ProxyData.tokenAddress;
|
||||||
await Promise.all([
|
await Promise.all([
|
||||||
this._increaseBalanceAndAllowanceAsync(makerTokenAddress, makerAddress, makerFillableAmount),
|
this._increaseERC20BalanceAndAllowanceAsync(makerTokenAddress, makerAddress, makerFillableAmount),
|
||||||
this._increaseBalanceAndAllowanceAsync(takerTokenAddress, takerAddress, takerFillableAmount),
|
this._increaseERC20BalanceAndAllowanceAsync(takerTokenAddress, takerAddress, takerFillableAmount),
|
||||||
]);
|
]);
|
||||||
await Promise.all([
|
await Promise.all([
|
||||||
this._increaseBalanceAndAllowanceAsync(this._zrxTokenAddress, makerAddress, makerFee),
|
this._increaseERC20BalanceAndAllowanceAsync(this._zrxTokenAddress, makerAddress, makerFee),
|
||||||
this._increaseBalanceAndAllowanceAsync(this._zrxTokenAddress, takerAddress, takerFee),
|
this._increaseERC20BalanceAndAllowanceAsync(this._zrxTokenAddress, takerAddress, takerFee),
|
||||||
]);
|
]);
|
||||||
|
const senderAddress = constants.NULL_ADDRESS;
|
||||||
|
|
||||||
const signedOrder = await orderFactory.createSignedOrderAsync(
|
const signedOrder = await orderFactory.createSignedOrderAsync(
|
||||||
this._web3Wrapper.getProvider(),
|
this._web3Wrapper.getProvider(),
|
||||||
makerAddress,
|
makerAddress,
|
||||||
takerAddress,
|
takerAddress,
|
||||||
|
senderAddress,
|
||||||
makerFee,
|
makerFee,
|
||||||
takerFee,
|
takerFee,
|
||||||
makerFillableAmount,
|
makerFillableAmount,
|
||||||
makerTokenAddress,
|
makerAssetData,
|
||||||
takerFillableAmount,
|
takerFillableAmount,
|
||||||
takerTokenAddress,
|
takerAssetData,
|
||||||
this._exchangeContractAddress,
|
this._exchangeAddress,
|
||||||
feeRecepient,
|
feeRecepientAddress,
|
||||||
expirationUnixTimestampSec,
|
expirationTimeSeconds,
|
||||||
);
|
);
|
||||||
return signedOrder;
|
return signedOrder;
|
||||||
}
|
}
|
||||||
private async _increaseBalanceAndAllowanceAsync(
|
private async _increaseERC20BalanceAndAllowanceAsync(
|
||||||
tokenAddress: string,
|
tokenAddress: string,
|
||||||
address: string,
|
address: string,
|
||||||
amount: BigNumber,
|
amount: BigNumber,
|
||||||
@ -204,12 +209,12 @@ export class FillScenarios {
|
|||||||
return; // noop
|
return; // noop
|
||||||
}
|
}
|
||||||
await Promise.all([
|
await Promise.all([
|
||||||
this._increaseBalanceAsync(tokenAddress, address, amount),
|
this._increaseERC20BalanceAsync(tokenAddress, address, amount),
|
||||||
this._increaseAllowanceAsync(tokenAddress, address, amount),
|
this._increaseERC20AllowanceAsync(tokenAddress, address, amount),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
private async _increaseBalanceAsync(tokenAddress: string, address: string, amount: BigNumber): Promise<void> {
|
private async _increaseERC20BalanceAsync(tokenAddress: string, address: string, amount: BigNumber): Promise<void> {
|
||||||
const token = new TokenContract(
|
const token = new ERC20TokenContract(
|
||||||
artifacts.Token.abi,
|
artifacts.Token.abi,
|
||||||
tokenAddress,
|
tokenAddress,
|
||||||
this._web3Wrapper.getProvider(),
|
this._web3Wrapper.getProvider(),
|
||||||
@ -219,8 +224,12 @@ export class FillScenarios {
|
|||||||
from: this._coinbase,
|
from: this._coinbase,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
private async _increaseAllowanceAsync(tokenAddress: string, address: string, amount: BigNumber): Promise<void> {
|
private async _increaseERC20AllowanceAsync(
|
||||||
const tokenInstance = new TokenContract(
|
tokenAddress: string,
|
||||||
|
address: string,
|
||||||
|
amount: BigNumber,
|
||||||
|
): Promise<void> {
|
||||||
|
const tokenInstance = new ERC20TokenContract(
|
||||||
artifacts.Token.abi,
|
artifacts.Token.abi,
|
||||||
tokenAddress,
|
tokenAddress,
|
||||||
this._web3Wrapper.getProvider(),
|
this._web3Wrapper.getProvider(),
|
||||||
|
@ -10,7 +10,8 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"watch": "tsc -w",
|
"watch": "tsc -w",
|
||||||
"lint": "tslint --project .",
|
"lint": "tslint --project .",
|
||||||
"test": "run-s clean build run_mocha",
|
"test": "yarn run_mocha",
|
||||||
|
"rebuild_and_test": "run-s clean build test",
|
||||||
"test:coverage": "nyc npm run test --all && yarn coverage:report:lcov",
|
"test:coverage": "nyc npm run test --all && yarn coverage:report:lcov",
|
||||||
"coverage:report:lcov": "nyc report --reporter=text-lcov > coverage/lcov.info",
|
"coverage:report:lcov": "nyc report --reporter=text-lcov > coverage/lcov.info",
|
||||||
"test:circleci": "yarn test:coverage",
|
"test:circleci": "yarn test:coverage",
|
||||||
|
@ -13,7 +13,8 @@
|
|||||||
"prebuild": "run-s clean compile generate_contract_wrappers copy_artifacts",
|
"prebuild": "run-s clean compile generate_contract_wrappers copy_artifacts",
|
||||||
"copy_artifacts": "copyfiles './artifacts/**/*' './contracts/**/*' ./lib",
|
"copy_artifacts": "copyfiles './artifacts/**/*' './contracts/**/*' ./lib",
|
||||||
"build": "tsc",
|
"build": "tsc",
|
||||||
"test": "run-s build run_mocha",
|
"test": "yarn run_mocha",
|
||||||
|
"rebuild_and_test": "run-s build test",
|
||||||
"test:coverage": "SOLIDITY_COVERAGE=true run-s build run_mocha coverage:report:text coverage:report:lcov",
|
"test:coverage": "SOLIDITY_COVERAGE=true run-s build run_mocha coverage:report:text coverage:report:lcov",
|
||||||
"run_mocha": "mocha lib/test/**/*_test.js lib/test/global_hooks.js --bail --exit",
|
"run_mocha": "mocha lib/test/**/*_test.js lib/test/global_hooks.js --bail --exit",
|
||||||
"generate_contract_wrappers": "abi-gen --abis 'artifacts/Metacoin.json' --template ../contract_templates/contract.handlebars --partials '../contract_templates/partials/**/*.handlebars' --output src/contract_wrappers --backend ethers && prettier --write 'src/contract_wrappers/**.ts'",
|
"generate_contract_wrappers": "abi-gen --abis 'artifacts/Metacoin.json' --template ../contract_templates/contract.handlebars --partials '../contract_templates/partials/**/*.handlebars' --output src/contract_wrappers --backend ethers && prettier --write 'src/contract_wrappers/**.ts'",
|
||||||
|
226
packages/migrations/artifacts/2.0.0/ERC20Token.json
vendored
Normal file
226
packages/migrations/artifacts/2.0.0/ERC20Token.json
vendored
Normal file
File diff suppressed because one or more lines are too long
375
packages/migrations/artifacts/2.0.0/ERC721Token.json
vendored
Normal file
375
packages/migrations/artifacts/2.0.0/ERC721Token.json
vendored
Normal file
File diff suppressed because one or more lines are too long
@ -24,14 +24,14 @@
|
|||||||
"generate_contract_wrappers:v2":
|
"generate_contract_wrappers:v2":
|
||||||
"abi-gen --abis ${npm_package_config_abis_v2} --template ../contract_templates/contract.handlebars --partials '../contract_templates/partials/**/*.handlebars' --output src/v2/contract_wrappers --backend ethers && prettier --write 'src/v2/contract_wrappers/**.ts'",
|
"abi-gen --abis ${npm_package_config_abis_v2} --template ../contract_templates/contract.handlebars --partials '../contract_templates/partials/**/*.handlebars' --output src/v2/contract_wrappers --backend ethers && prettier --write 'src/v2/contract_wrappers/**.ts'",
|
||||||
"compile:v1": "sol-compiler --artifacts-dir artifacts/1.0.0 --contracts Exchange_v1,DummyERC20Token,ZRXToken,WETH9,TokenTransferProxy_v1,MultiSigWallet,MultiSigWalletWithTimeLock,MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress,TokenRegistry",
|
"compile:v1": "sol-compiler --artifacts-dir artifacts/1.0.0 --contracts Exchange_v1,DummyERC20Token,ZRXToken,WETH9,TokenTransferProxy_v1,MultiSigWallet,MultiSigWalletWithTimeLock,MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress,TokenRegistry",
|
||||||
"compile:v2": "sol-compiler --artifacts-dir artifacts/2.0.0 --contracts DummyERC20Token,DummyERC721Token,ERC20Proxy,ERC721Proxy,Exchange,MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress,ZRXToken,WETH9,IWallet,IValidator"
|
"compile:v2": "sol-compiler --artifacts-dir artifacts/2.0.0 --contracts ERC20Token,DummyERC20Token,ERC721Token,DummyERC721Token,ERC20Proxy,ERC721Proxy,Exchange,MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress,ZRXToken,WETH9,IWallet,IValidator"
|
||||||
},
|
},
|
||||||
"config": {
|
"config": {
|
||||||
"abis": {
|
"abis": {
|
||||||
"v1":
|
"v1":
|
||||||
"artifacts/1.0.0/@(DummyERC20Token|TokenTransferProxy_v1|Exchange_v1|TokenRegistry|MultiSigWallet|MultiSigWalletWithTimeLock|MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress|TokenRegistry|ZRXToken|WETH9).json",
|
"artifacts/1.0.0/@(DummyERC20Token|TokenTransferProxy_v1|Exchange_v1|TokenRegistry|MultiSigWallet|MultiSigWalletWithTimeLock|MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress|TokenRegistry|ZRXToken|WETH9).json",
|
||||||
"v2":
|
"v2":
|
||||||
"artifacts/2.0.0/@(DummyERC20Token|DummyERC721Token|ERC20Proxy|ERC721Proxy|Exchange|MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress|ZRXToken|WETH9|IWallet|IValidator).json"
|
"artifacts/2.0.0/@(ERC20Token|DummyERC20Token|ERC721Token|DummyERC721Token|ERC20Proxy|ERC721Proxy|Exchange|MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress|ZRXToken|WETH9|IWallet|IValidator).json"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
|
@ -1,4 +1,13 @@
|
|||||||
[
|
[
|
||||||
|
{
|
||||||
|
"version": "0.1.0",
|
||||||
|
"changes": [
|
||||||
|
{
|
||||||
|
"note": "Make order-utils compatible with V2 of 0x protocol",
|
||||||
|
"pr": 636
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"version": "0.0.5",
|
"version": "0.0.5",
|
||||||
"changes": [
|
"changes": [
|
||||||
|
@ -14,7 +14,8 @@
|
|||||||
"copy_monorepo_scripts": "copyfiles -u 3 './lib/src/monorepo_scripts/**/*' ./scripts",
|
"copy_monorepo_scripts": "copyfiles -u 3 './lib/src/monorepo_scripts/**/*' ./scripts",
|
||||||
"generate_contract_wrappers": "abi-gen --abis 'lib/src/artifacts/@(Exchange|IWallet|IValidator).json' --template ../contract_templates/contract.handlebars --partials '../contract_templates/partials/**/*.handlebars' --output src/generated_contract_wrappers --backend ethers && prettier --write 'src/generated_contract_wrappers/**.ts'",
|
"generate_contract_wrappers": "abi-gen --abis 'lib/src/artifacts/@(Exchange|IWallet|IValidator).json' --template ../contract_templates/contract.handlebars --partials '../contract_templates/partials/**/*.handlebars' --output src/generated_contract_wrappers --backend ethers && prettier --write 'src/generated_contract_wrappers/**.ts'",
|
||||||
"update_artifacts": "for i in ${npm_package_config_contracts}; do copyfiles -u 4 ../migrations/artifacts/2.0.0/$i.json lib/src/artifacts; done;",
|
"update_artifacts": "for i in ${npm_package_config_contracts}; do copyfiles -u 4 ../migrations/artifacts/2.0.0/$i.json lib/src/artifacts; done;",
|
||||||
"test": "run-s build run_mocha",
|
"test": "yarn run_mocha",
|
||||||
|
"rebuild_and_test": "run-s build test",
|
||||||
"test:circleci": "yarn test:coverage",
|
"test:circleci": "yarn test:coverage",
|
||||||
"run_mocha": "mocha lib/test/**/*_test.js --bail --exit",
|
"run_mocha": "mocha lib/test/**/*_test.js --bail --exit",
|
||||||
"test:coverage": "nyc npm run test --all && yarn coverage:report:lcov",
|
"test:coverage": "nyc npm run test --all && yarn coverage:report:lcov",
|
||||||
|
@ -1,22 +0,0 @@
|
|||||||
{
|
|
||||||
"contract_name": "DummyToken",
|
|
||||||
"abi": [
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_target",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "setBalance",
|
|
||||||
"outputs": [],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
@ -1,287 +0,0 @@
|
|||||||
{
|
|
||||||
"contract_name": "EtherToken",
|
|
||||||
"abi": [
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [],
|
|
||||||
"name": "name",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_spender",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "approve",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [],
|
|
||||||
"name": "totalSupply",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_from",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_to",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "transferFrom",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "amount",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "withdraw",
|
|
||||||
"outputs": [],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [],
|
|
||||||
"name": "decimals",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "uint8"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_owner",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "balanceOf",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [],
|
|
||||||
"name": "symbol",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_to",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "transfer",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [],
|
|
||||||
"name": "deposit",
|
|
||||||
"outputs": [],
|
|
||||||
"payable": true,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_owner",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_spender",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "allowance",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"payable": true,
|
|
||||||
"type": "fallback"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_from",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_to",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "Transfer",
|
|
||||||
"type": "event"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_owner",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_spender",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "Approval",
|
|
||||||
"type": "event"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_owner",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "Deposit",
|
|
||||||
"type": "event"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_owner",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "Withdrawal",
|
|
||||||
"type": "event"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"networks": {
|
|
||||||
"1": {
|
|
||||||
"address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
|
|
||||||
},
|
|
||||||
"3": {
|
|
||||||
"address": "0xc00fd9820cd2898cc4c054b7bf142de637ad129a"
|
|
||||||
},
|
|
||||||
"4": {
|
|
||||||
"address": "0xc778417e063141139fce010982780140aa0cd5ab"
|
|
||||||
},
|
|
||||||
"42": {
|
|
||||||
"address": "0x653e49e301e508a13237c0ddc98ae7d4cd2667a1"
|
|
||||||
},
|
|
||||||
"50": {
|
|
||||||
"address": "0x871dd7c2b4b25e1aa18728e9d5f2af4c4e431f5c"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,610 +0,0 @@
|
|||||||
{
|
|
||||||
"contract_name": "Exchange",
|
|
||||||
"abi": [
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "numerator",
|
|
||||||
"type": "uint256"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "denominator",
|
|
||||||
"type": "uint256"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "target",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "isRoundingError",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "bytes32"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "filled",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "bytes32"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "cancelled",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "orderAddresses",
|
|
||||||
"type": "address[5][]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "orderValues",
|
|
||||||
"type": "uint256[6][]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "fillTakerTokenAmount",
|
|
||||||
"type": "uint256"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "shouldThrowOnInsufficientBalanceOrAllowance",
|
|
||||||
"type": "bool"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "v",
|
|
||||||
"type": "uint8[]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "r",
|
|
||||||
"type": "bytes32[]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "s",
|
|
||||||
"type": "bytes32[]"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "fillOrdersUpTo",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "orderAddresses",
|
|
||||||
"type": "address[5]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "orderValues",
|
|
||||||
"type": "uint256[6]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "cancelTakerTokenAmount",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "cancelOrder",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [],
|
|
||||||
"name": "ZRX_TOKEN_CONTRACT",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "orderAddresses",
|
|
||||||
"type": "address[5][]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "orderValues",
|
|
||||||
"type": "uint256[6][]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "fillTakerTokenAmounts",
|
|
||||||
"type": "uint256[]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "v",
|
|
||||||
"type": "uint8[]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "r",
|
|
||||||
"type": "bytes32[]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "s",
|
|
||||||
"type": "bytes32[]"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "batchFillOrKillOrders",
|
|
||||||
"outputs": [],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "orderAddresses",
|
|
||||||
"type": "address[5]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "orderValues",
|
|
||||||
"type": "uint256[6]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "fillTakerTokenAmount",
|
|
||||||
"type": "uint256"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "v",
|
|
||||||
"type": "uint8"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "r",
|
|
||||||
"type": "bytes32"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "s",
|
|
||||||
"type": "bytes32"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "fillOrKillOrder",
|
|
||||||
"outputs": [],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "orderHash",
|
|
||||||
"type": "bytes32"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "getUnavailableTakerTokenAmount",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "signer",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "hash",
|
|
||||||
"type": "bytes32"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "v",
|
|
||||||
"type": "uint8"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "r",
|
|
||||||
"type": "bytes32"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "s",
|
|
||||||
"type": "bytes32"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "isValidSignature",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "numerator",
|
|
||||||
"type": "uint256"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "denominator",
|
|
||||||
"type": "uint256"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "target",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "getPartialAmount",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [],
|
|
||||||
"name": "TOKEN_TRANSFER_PROXY_CONTRACT",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "orderAddresses",
|
|
||||||
"type": "address[5][]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "orderValues",
|
|
||||||
"type": "uint256[6][]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "fillTakerTokenAmounts",
|
|
||||||
"type": "uint256[]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "shouldThrowOnInsufficientBalanceOrAllowance",
|
|
||||||
"type": "bool"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "v",
|
|
||||||
"type": "uint8[]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "r",
|
|
||||||
"type": "bytes32[]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "s",
|
|
||||||
"type": "bytes32[]"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "batchFillOrders",
|
|
||||||
"outputs": [],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "orderAddresses",
|
|
||||||
"type": "address[5][]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "orderValues",
|
|
||||||
"type": "uint256[6][]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "cancelTakerTokenAmounts",
|
|
||||||
"type": "uint256[]"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "batchCancelOrders",
|
|
||||||
"outputs": [],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "orderAddresses",
|
|
||||||
"type": "address[5]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "orderValues",
|
|
||||||
"type": "uint256[6]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "fillTakerTokenAmount",
|
|
||||||
"type": "uint256"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "shouldThrowOnInsufficientBalanceOrAllowance",
|
|
||||||
"type": "bool"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "v",
|
|
||||||
"type": "uint8"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "r",
|
|
||||||
"type": "bytes32"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "s",
|
|
||||||
"type": "bytes32"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "fillOrder",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "filledTakerTokenAmount",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "orderAddresses",
|
|
||||||
"type": "address[5]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "orderValues",
|
|
||||||
"type": "uint256[6]"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "getOrderHash",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "bytes32"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [],
|
|
||||||
"name": "EXTERNAL_QUERY_GAS_LIMIT",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "uint16"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [],
|
|
||||||
"name": "VERSION",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_zrxToken",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_tokenTransferProxy",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "constructor"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "maker",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "taker",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "feeRecipient",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "makerToken",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "takerToken",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "filledMakerTokenAmount",
|
|
||||||
"type": "uint256"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "filledTakerTokenAmount",
|
|
||||||
"type": "uint256"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "paidMakerFee",
|
|
||||||
"type": "uint256"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "paidTakerFee",
|
|
||||||
"type": "uint256"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "tokens",
|
|
||||||
"type": "bytes32"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "orderHash",
|
|
||||||
"type": "bytes32"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "LogFill",
|
|
||||||
"type": "event"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "maker",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "feeRecipient",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "makerToken",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "takerToken",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "cancelledMakerTokenAmount",
|
|
||||||
"type": "uint256"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "cancelledTakerTokenAmount",
|
|
||||||
"type": "uint256"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "tokens",
|
|
||||||
"type": "bytes32"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "orderHash",
|
|
||||||
"type": "bytes32"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "LogCancel",
|
|
||||||
"type": "event"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "errorId",
|
|
||||||
"type": "uint8"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "orderHash",
|
|
||||||
"type": "bytes32"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "LogError",
|
|
||||||
"type": "event"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"networks": {
|
|
||||||
"1": {
|
|
||||||
"address": "0x12459c951127e0c374ff9105dda097662a027093"
|
|
||||||
},
|
|
||||||
"3": {
|
|
||||||
"address": "0x479cc461fecd078f766ecc58533d6f69580cf3ac"
|
|
||||||
},
|
|
||||||
"4": {
|
|
||||||
"address": "0x1d16ef40fac01cec8adac2ac49427b9384192c05"
|
|
||||||
},
|
|
||||||
"42": {
|
|
||||||
"address": "0x90fe2af704b34e0224bf2299c838e04d4dcf1364"
|
|
||||||
},
|
|
||||||
"50": {
|
|
||||||
"address": "0x48bacb9266a570d521063ef5dd96e61686dbe788"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,172 +0,0 @@
|
|||||||
{
|
|
||||||
"contract_name": "Token",
|
|
||||||
"abi": [
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_spender",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "approve",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "success",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [],
|
|
||||||
"name": "totalSupply",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "supply",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_from",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_to",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "transferFrom",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "success",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_owner",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "balanceOf",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "balance",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_to",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "transfer",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "success",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_owner",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_spender",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "allowance",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "remaining",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_from",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_to",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "Transfer",
|
|
||||||
"type": "event"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_owner",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_spender",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "Approval",
|
|
||||||
"type": "event"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
@ -1,547 +0,0 @@
|
|||||||
{
|
|
||||||
"contract_name": "TokenRegistry",
|
|
||||||
"abi": [
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_token",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_index",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "removeToken",
|
|
||||||
"outputs": [],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_name",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "getTokenAddressByName",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_symbol",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "getTokenAddressBySymbol",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_token",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_swarmHash",
|
|
||||||
"type": "bytes"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "setTokenSwarmHash",
|
|
||||||
"outputs": [],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_token",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "getTokenMetaData",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "uint8"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "bytes"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "bytes"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [],
|
|
||||||
"name": "owner",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_token",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_name",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_symbol",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_decimals",
|
|
||||||
"type": "uint8"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_ipfsHash",
|
|
||||||
"type": "bytes"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_swarmHash",
|
|
||||||
"type": "bytes"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "addToken",
|
|
||||||
"outputs": [],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_token",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_name",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "setTokenName",
|
|
||||||
"outputs": [],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "tokens",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "token",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "name",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "symbol",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "decimals",
|
|
||||||
"type": "uint8"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "ipfsHash",
|
|
||||||
"type": "bytes"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "swarmHash",
|
|
||||||
"type": "bytes"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "tokenAddresses",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_name",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "getTokenByName",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "uint8"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "bytes"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "bytes"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [],
|
|
||||||
"name": "getTokenAddresses",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "address[]"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_token",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_ipfsHash",
|
|
||||||
"type": "bytes"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "setTokenIpfsHash",
|
|
||||||
"outputs": [],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_symbol",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "getTokenBySymbol",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "uint8"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "bytes"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "bytes"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_token",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_symbol",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "setTokenSymbol",
|
|
||||||
"outputs": [],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "newOwner",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "transferOwnership",
|
|
||||||
"outputs": [],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "token",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "name",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "symbol",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "decimals",
|
|
||||||
"type": "uint8"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "ipfsHash",
|
|
||||||
"type": "bytes"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "swarmHash",
|
|
||||||
"type": "bytes"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "LogAddToken",
|
|
||||||
"type": "event"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "token",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "name",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "symbol",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "decimals",
|
|
||||||
"type": "uint8"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "ipfsHash",
|
|
||||||
"type": "bytes"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "swarmHash",
|
|
||||||
"type": "bytes"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "LogRemoveToken",
|
|
||||||
"type": "event"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "token",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "oldName",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "newName",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "LogTokenNameChange",
|
|
||||||
"type": "event"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "token",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "oldSymbol",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "newSymbol",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "LogTokenSymbolChange",
|
|
||||||
"type": "event"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "token",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "oldIpfsHash",
|
|
||||||
"type": "bytes"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "newIpfsHash",
|
|
||||||
"type": "bytes"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "LogTokenIpfsHashChange",
|
|
||||||
"type": "event"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "token",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "oldSwarmHash",
|
|
||||||
"type": "bytes"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "newSwarmHash",
|
|
||||||
"type": "bytes"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "LogTokenSwarmHashChange",
|
|
||||||
"type": "event"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"networks": {
|
|
||||||
"1": {
|
|
||||||
"address": "0x926a74c5c36adf004c87399e65f75628b0f98d2c"
|
|
||||||
},
|
|
||||||
"3": {
|
|
||||||
"address": "0x6b1a50f0bb5a7995444bd3877b22dc89c62843ed"
|
|
||||||
},
|
|
||||||
"4": {
|
|
||||||
"address": "0x4e9aad8184de8833365fea970cd9149372fdf1e6"
|
|
||||||
},
|
|
||||||
"42": {
|
|
||||||
"address": "0xf18e504561f4347bea557f3d4558f559dddbae7f"
|
|
||||||
},
|
|
||||||
"50": {
|
|
||||||
"address": "0x0b1ba0af832d7c05fd64161e0db78e85978e8082"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,187 +0,0 @@
|
|||||||
{
|
|
||||||
"contract_name": "TokenTransferProxy",
|
|
||||||
"abi": [
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "token",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "from",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "to",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "transferFrom",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "target",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "addAuthorizedAddress",
|
|
||||||
"outputs": [],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "authorities",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "target",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "removeAuthorizedAddress",
|
|
||||||
"outputs": [],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [],
|
|
||||||
"name": "owner",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "authorized",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [],
|
|
||||||
"name": "getAuthorizedAddresses",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "address[]"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "newOwner",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "transferOwnership",
|
|
||||||
"outputs": [],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "target",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "caller",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "LogAuthorizedAddressAdded",
|
|
||||||
"type": "event"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "target",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "caller",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "LogAuthorizedAddressRemoved",
|
|
||||||
"type": "event"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"networks": {
|
|
||||||
"1": {
|
|
||||||
"address": "0x8da0d80f5007ef1e431dd2127178d224e32c2ef4"
|
|
||||||
},
|
|
||||||
"3": {
|
|
||||||
"address": "0x4e9aad8184de8833365fea970cd9149372fdf1e6"
|
|
||||||
},
|
|
||||||
"4": {
|
|
||||||
"address": "0xa8e9fa8f91e5ae138c74648c9c304f1c75003a8d"
|
|
||||||
},
|
|
||||||
"42": {
|
|
||||||
"address": "0x087eed4bc1ee3de49befbd66c662b434b15d49d4"
|
|
||||||
},
|
|
||||||
"50": {
|
|
||||||
"address": "0x1dc4c1cefef38a777b15aa20260a54e584b16c48"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,20 +0,0 @@
|
|||||||
{
|
|
||||||
"contract_name": "ZRX",
|
|
||||||
"networks": {
|
|
||||||
"1": {
|
|
||||||
"address": "0xe41d2489571d322189246dafa5ebde1f4699f498"
|
|
||||||
},
|
|
||||||
"3": {
|
|
||||||
"address": "0xa8e9fa8f91e5ae138c74648c9c304f1c75003a8d"
|
|
||||||
},
|
|
||||||
"4": {
|
|
||||||
"address": "0x00f58d6d585f84b2d7267940cede30ce2fe6eae8"
|
|
||||||
},
|
|
||||||
"42": {
|
|
||||||
"address": "0x6ff6c0ff1d68b964901f986d4c9fa3ac68346570"
|
|
||||||
},
|
|
||||||
"50": {
|
|
||||||
"address": "0x1d7022f5b17d2f8b695918fb48fa1089c9f85401"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,5 +1,13 @@
|
|||||||
export { orderHashUtils } from './order_hash';
|
export { orderHashUtils } from './order_hash';
|
||||||
export { isValidSignatureAsync, ecSignOrderHashAsync, addSignedMessagePrefix } from './signature_utils';
|
export {
|
||||||
|
isValidSignatureAsync,
|
||||||
|
isValidPresignedSignatureAsync,
|
||||||
|
isValidWalletSignatureAsync,
|
||||||
|
isValidValidatorSignatureAsync,
|
||||||
|
isValidECSignature,
|
||||||
|
ecSignOrderHashAsync,
|
||||||
|
addSignedMessagePrefix,
|
||||||
|
} from './signature_utils';
|
||||||
export { orderFactory } from './order_factory';
|
export { orderFactory } from './order_factory';
|
||||||
export { constants } from './constants';
|
export { constants } from './constants';
|
||||||
export { crypto } from './crypto';
|
export { crypto } from './crypto';
|
||||||
|
@ -17,7 +17,8 @@
|
|||||||
"generate_contract_wrappers": "abi-gen --abis 'src/compact_artifacts/@(Exchange|Token|TokenTransferProxy|EtherToken).json' --template ../contract_templates/contract.handlebars --partials '../contract_templates/partials/**/*.handlebars' --output src/generated_contract_wrappers --backend ethers && prettier --write 'src/generated_contract_wrappers/**.ts'",
|
"generate_contract_wrappers": "abi-gen --abis 'src/compact_artifacts/@(Exchange|Token|TokenTransferProxy|EtherToken).json' --template ../contract_templates/contract.handlebars --partials '../contract_templates/partials/**/*.handlebars' --output src/generated_contract_wrappers --backend ethers && prettier --write 'src/generated_contract_wrappers/**.ts'",
|
||||||
"lint": "tslint --project . --exclude **/src/generated_contract_wrappers/**/*",
|
"lint": "tslint --project . --exclude **/src/generated_contract_wrappers/**/*",
|
||||||
"test:circleci": "run-s test:coverage",
|
"test:circleci": "run-s test:coverage",
|
||||||
"test": "run-s clean build run_mocha",
|
"test": "yarn run_mocha",
|
||||||
|
"rebuild_and_test": "run-s build test",
|
||||||
"test:coverage": "nyc npm run test --all && yarn coverage:report:lcov",
|
"test:coverage": "nyc npm run test --all && yarn coverage:report:lcov",
|
||||||
"coverage:report:lcov": "nyc report --reporter=text-lcov > coverage/lcov.info",
|
"coverage:report:lcov": "nyc report --reporter=text-lcov > coverage/lcov.info",
|
||||||
"update_artifacts": "for i in ${npm_package_config_contracts}; do copyfiles -u 4 ../migrations/artifacts/1.0.0/$i.json test/artifacts; done;",
|
"update_artifacts": "for i in ${npm_package_config_contracts}; do copyfiles -u 4 ../migrations/artifacts/1.0.0/$i.json test/artifacts; done;",
|
||||||
|
@ -22,7 +22,6 @@ const baseColors = {
|
|||||||
heroGrey: '#404040',
|
heroGrey: '#404040',
|
||||||
projectsGrey: '#343333',
|
projectsGrey: '#343333',
|
||||||
darkestGrey: '#272727',
|
darkestGrey: '#272727',
|
||||||
dharmaDarkGrey: '#252525',
|
|
||||||
lightBlue: '#60A4F4',
|
lightBlue: '#60A4F4',
|
||||||
lightBlueA700: '#0091EA',
|
lightBlueA700: '#0091EA',
|
||||||
linkBlue: '#1D5CDE',
|
linkBlue: '#1D5CDE',
|
||||||
|
@ -10,7 +10,8 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"watch": "tsc -w",
|
"watch": "tsc -w",
|
||||||
"build": "yarn clean && copyfiles 'test/fixtures/contracts/**/*' ./lib && tsc && copyfiles -u 3 './lib/src/monorepo_scripts/**/*' ./scripts",
|
"build": "yarn clean && copyfiles 'test/fixtures/contracts/**/*' ./lib && tsc && copyfiles -u 3 './lib/src/monorepo_scripts/**/*' ./scripts",
|
||||||
"test": "run-s build run_mocha",
|
"test": "yarn run_mocha",
|
||||||
|
"rebuild_and_test": "run-s build test",
|
||||||
"run_mocha": "mocha lib/test/*_test.js --bail --exit",
|
"run_mocha": "mocha lib/test/*_test.js --bail --exit",
|
||||||
"test:coverage": "nyc npm run test --all && yarn coverage:report:lcov",
|
"test:coverage": "nyc npm run test --all && yarn coverage:report:lcov",
|
||||||
"coverage:report:lcov": "nyc report --reporter=text-lcov > coverage/lcov.info",
|
"coverage:report:lcov": "nyc report --reporter=text-lcov > coverage/lcov.info",
|
||||||
|
@ -10,7 +10,8 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"watch": "tsc -w",
|
"watch": "tsc -w",
|
||||||
"lint": "tslint --project .",
|
"lint": "tslint --project .",
|
||||||
"test": "run-s clean build compile_test run_mocha",
|
"test": "run-s compile_test run_mocha",
|
||||||
|
"rebuild_and_test": "run-s clean build test",
|
||||||
"test:coverage": "nyc npm run test --all && yarn coverage:report:lcov",
|
"test:coverage": "nyc npm run test --all && yarn coverage:report:lcov",
|
||||||
"coverage:report:lcov": "nyc report --reporter=text-lcov > coverage/lcov.info",
|
"coverage:report:lcov": "nyc report --reporter=text-lcov > coverage/lcov.info",
|
||||||
"test:circleci": "yarn test:coverage",
|
"test:circleci": "yarn test:coverage",
|
||||||
|
@ -12,7 +12,8 @@
|
|||||||
"clean": "shx rm -rf lib scripts",
|
"clean": "shx rm -rf lib scripts",
|
||||||
"build": "tsc && copyfiles -u 3 './lib/src/monorepo_scripts/**/*' ./scripts",
|
"build": "tsc && copyfiles -u 3 './lib/src/monorepo_scripts/**/*' ./scripts",
|
||||||
"lint": "tslint --project .",
|
"lint": "tslint --project .",
|
||||||
"test": "run-s clean build copy_test_environments copy_test_fixtures run_mocha",
|
"test": "run-s copy_test_environments copy_test_fixtures run_mocha",
|
||||||
|
"rebuild_and_test": "run-s clean build test",
|
||||||
"copy_test_fixtures": "copyfiles -u 2 './test/fixtures/**/*.json' ./lib/test/fixtures",
|
"copy_test_fixtures": "copyfiles -u 2 './test/fixtures/**/*.json' ./lib/test/fixtures",
|
||||||
"copy_test_environments": "copyfiles -u 2 './test/environments/**/*.json' ./lib/test/environments",
|
"copy_test_environments": "copyfiles -u 2 './test/environments/**/*.json' ./lib/test/environments",
|
||||||
"run_mocha": "mocha lib/test/**/*_test.js --exit",
|
"run_mocha": "mocha lib/test/**/*_test.js --exit",
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
"async-suffix": true,
|
"async-suffix": true,
|
||||||
"boolean-naming": true,
|
"boolean-naming": true,
|
||||||
"no-switch-case-fall-through": true,
|
"no-switch-case-fall-through": true,
|
||||||
|
"switch-default": true,
|
||||||
"await-promise": true,
|
"await-promise": true,
|
||||||
"custom-no-magic-numbers": [true, 0, 1, 2, 3, -1],
|
"custom-no-magic-numbers": [true, 0, 1, 2, 3, -1],
|
||||||
"binary-expression-operand-order": true,
|
"binary-expression-operand-order": true,
|
||||||
|
@ -12,7 +12,8 @@
|
|||||||
"build": "tsc && copyfiles -u 3 './lib/src/monorepo_scripts/**/*' ./scripts",
|
"build": "tsc && copyfiles -u 3 './lib/src/monorepo_scripts/**/*' ./scripts",
|
||||||
"clean": "shx rm -rf lib scripts",
|
"clean": "shx rm -rf lib scripts",
|
||||||
"lint": "tslint --project .",
|
"lint": "tslint --project .",
|
||||||
"test": "run-s clean build run_mocha",
|
"test": "yarn run_mocha",
|
||||||
|
"rebuild_and_test": "run-s clean build test",
|
||||||
"test:circleci": "yarn test:coverage",
|
"test:circleci": "yarn test:coverage",
|
||||||
"run_mocha": "mocha lib/test/**/*_test.js --bail --exit",
|
"run_mocha": "mocha lib/test/**/*_test.js --bail --exit",
|
||||||
"test:coverage": "nyc npm run test --all && yarn coverage:report:lcov",
|
"test:coverage": "nyc npm run test --all && yarn coverage:report:lcov",
|
||||||
|
@ -37,6 +37,7 @@
|
|||||||
"lodash": "^4.17.4",
|
"lodash": "^4.17.4",
|
||||||
"material-ui": "^0.17.1",
|
"material-ui": "^0.17.1",
|
||||||
"moment": "2.21.0",
|
"moment": "2.21.0",
|
||||||
|
"polished": "^1.9.2",
|
||||||
"query-string": "^6.0.0",
|
"query-string": "^6.0.0",
|
||||||
"react": "15.6.1",
|
"react": "15.6.1",
|
||||||
"react-copy-to-clipboard": "^4.2.3",
|
"react-copy-to-clipboard": "^4.2.3",
|
||||||
@ -52,6 +53,7 @@
|
|||||||
"redux": "^3.6.0",
|
"redux": "^3.6.0",
|
||||||
"redux-devtools-extension": "^2.13.2",
|
"redux-devtools-extension": "^2.13.2",
|
||||||
"semver-sort": "0.0.4",
|
"semver-sort": "0.0.4",
|
||||||
|
"styled-components": "^3.3.0",
|
||||||
"thenby": "^1.2.3",
|
"thenby": "^1.2.3",
|
||||||
"truffle-contract": "2.0.1",
|
"truffle-contract": "2.0.1",
|
||||||
"web3": "^0.20.0",
|
"web3": "^0.20.0",
|
||||||
|
124
packages/website/ts/components/forms/subscribe_form.tsx
Normal file
124
packages/website/ts/components/forms/subscribe_form.tsx
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
import { colors } from '@0xproject/react-shared';
|
||||||
|
import * as _ from 'lodash';
|
||||||
|
import * as React from 'react';
|
||||||
|
|
||||||
|
import { Button } from 'ts/components/ui/button';
|
||||||
|
import { Container } from 'ts/components/ui/container';
|
||||||
|
import { Input } from 'ts/components/ui/input';
|
||||||
|
import { Text } from 'ts/components/ui/text';
|
||||||
|
import { styled } from 'ts/style/theme';
|
||||||
|
import { backendClient } from 'ts/utils/backend_client';
|
||||||
|
|
||||||
|
export interface SubscribeFormProps {}
|
||||||
|
|
||||||
|
export enum SubscribeFormStatus {
|
||||||
|
None,
|
||||||
|
Error,
|
||||||
|
Success,
|
||||||
|
Loading,
|
||||||
|
Other,
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface SubscribeFormState {
|
||||||
|
emailText: string;
|
||||||
|
lastSubmittedEmail: string;
|
||||||
|
status: SubscribeFormStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
const FORM_FONT_SIZE = '15px';
|
||||||
|
|
||||||
|
// TODO: Translate visible strings. https://app.asana.com/0/628666249318202/697485674422001
|
||||||
|
export class SubscribeForm extends React.Component<SubscribeFormProps, SubscribeFormState> {
|
||||||
|
public state = {
|
||||||
|
emailText: '',
|
||||||
|
lastSubmittedEmail: '',
|
||||||
|
status: SubscribeFormStatus.None,
|
||||||
|
};
|
||||||
|
public render(): React.ReactNode {
|
||||||
|
return (
|
||||||
|
<Container className="flex flex-column items-center justify-between md-mx2 sm-mx2">
|
||||||
|
<Container marginBottom="15px">
|
||||||
|
<Text fontFamily="Roboto Mono" fontColor={colors.grey} center={true}>
|
||||||
|
Subscribe to our newsletter for 0x relayer and dApp updates
|
||||||
|
</Text>
|
||||||
|
</Container>
|
||||||
|
<form onSubmit={this._handleFormSubmitAsync.bind(this)}>
|
||||||
|
<Container className="flex flex-wrap justify-center items-center">
|
||||||
|
<Container marginTop="15px">
|
||||||
|
<Input
|
||||||
|
placeholder="you@email.com"
|
||||||
|
value={this.state.emailText}
|
||||||
|
fontColor={colors.white}
|
||||||
|
fontSize={FORM_FONT_SIZE}
|
||||||
|
backgroundColor={colors.projectsGrey}
|
||||||
|
width="300px"
|
||||||
|
onChange={this._handleEmailInputChange.bind(this)}
|
||||||
|
/>
|
||||||
|
</Container>
|
||||||
|
<Container marginLeft="15px" marginTop="15px">
|
||||||
|
<Button
|
||||||
|
type="submit"
|
||||||
|
backgroundColor={colors.darkestGrey}
|
||||||
|
fontColor={colors.white}
|
||||||
|
fontSize={FORM_FONT_SIZE}
|
||||||
|
>
|
||||||
|
Subscribe
|
||||||
|
</Button>
|
||||||
|
</Container>
|
||||||
|
</Container>
|
||||||
|
</form>
|
||||||
|
{this._renderMessage()}
|
||||||
|
</Container>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
private _renderMessage(): React.ReactNode {
|
||||||
|
let message = null;
|
||||||
|
switch (this.state.status) {
|
||||||
|
case SubscribeFormStatus.Error:
|
||||||
|
message = 'Sorry, something went wrong. Try again later.';
|
||||||
|
break;
|
||||||
|
case SubscribeFormStatus.Loading:
|
||||||
|
message = 'One second...';
|
||||||
|
break;
|
||||||
|
case SubscribeFormStatus.Success:
|
||||||
|
message = `Thanks! ${this.state.lastSubmittedEmail} is now on the mailing list.`;
|
||||||
|
break;
|
||||||
|
case SubscribeFormStatus.None:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new Error(
|
||||||
|
'The SubscribeFormStatus switch statement is not exhaustive when choosing an error message.',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return (
|
||||||
|
<Container isHidden={!message} marginTop="30px">
|
||||||
|
<Text center={true} fontFamily="Roboto Mono" fontColor={colors.grey}>
|
||||||
|
{message || 'spacer text (never shown to user)'}
|
||||||
|
</Text>
|
||||||
|
</Container>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
private _handleEmailInputChange(event: React.ChangeEvent<HTMLInputElement>): void {
|
||||||
|
this.setState({ emailText: event.target.value });
|
||||||
|
}
|
||||||
|
private async _handleFormSubmitAsync(event: React.FormEvent<HTMLInputElement>): Promise<void> {
|
||||||
|
event.preventDefault();
|
||||||
|
if (_.isUndefined(this.state.emailText) || _.isEmpty(this.state.emailText)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.setState({
|
||||||
|
status: SubscribeFormStatus.Loading,
|
||||||
|
lastSubmittedEmail: this.state.emailText,
|
||||||
|
});
|
||||||
|
try {
|
||||||
|
const response = await backendClient.subscribeToNewsletterAsync(this.state.emailText);
|
||||||
|
const status = response.status === 200 ? SubscribeFormStatus.Success : SubscribeFormStatus.Error;
|
||||||
|
this.setState({ status, emailText: '' });
|
||||||
|
} catch (error) {
|
||||||
|
this._setStatus(SubscribeFormStatus.Error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private _setStatus(status: SubscribeFormStatus): void {
|
||||||
|
this.setState({ status });
|
||||||
|
}
|
||||||
|
}
|
@ -4,9 +4,9 @@ import Toggle from 'material-ui/Toggle';
|
|||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { Blockchain } from 'ts/blockchain';
|
import { Blockchain } from 'ts/blockchain';
|
||||||
import { Dispatcher } from 'ts/redux/dispatcher';
|
import { Dispatcher } from 'ts/redux/dispatcher';
|
||||||
|
import { colors } from 'ts/style/colors';
|
||||||
import { BalanceErrs, Token, TokenState } from 'ts/types';
|
import { BalanceErrs, Token, TokenState } from 'ts/types';
|
||||||
import { analytics } from 'ts/utils/analytics';
|
import { analytics } from 'ts/utils/analytics';
|
||||||
import { colors } from 'ts/utils/colors';
|
|
||||||
import { errorReporter } from 'ts/utils/error_reporter';
|
import { errorReporter } from 'ts/utils/error_reporter';
|
||||||
import { utils } from 'ts/utils/utils';
|
import { utils } from 'ts/utils/utils';
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@ import { Styles } from '@0xproject/react-shared';
|
|||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
|
|
||||||
import { colors } from 'ts/utils/colors';
|
import { colors } from 'ts/style/colors';
|
||||||
|
|
||||||
export interface BackButtonProps {
|
export interface BackButtonProps {
|
||||||
to: string;
|
to: string;
|
||||||
|
@ -4,8 +4,8 @@ import * as React from 'react';
|
|||||||
|
|
||||||
import { defaultMenuItemEntries, Menu } from 'ts/components/portal/menu';
|
import { defaultMenuItemEntries, Menu } from 'ts/components/portal/menu';
|
||||||
import { Identicon } from 'ts/components/ui/identicon';
|
import { Identicon } from 'ts/components/ui/identicon';
|
||||||
|
import { colors } from 'ts/style/colors';
|
||||||
import { WebsitePaths } from 'ts/types';
|
import { WebsitePaths } from 'ts/types';
|
||||||
import { colors } from 'ts/utils/colors';
|
|
||||||
import { utils } from 'ts/utils/utils';
|
import { utils } from 'ts/utils/utils';
|
||||||
|
|
||||||
const IDENTICON_DIAMETER = 45;
|
const IDENTICON_DIAMETER = 45;
|
||||||
|
@ -2,8 +2,8 @@ import { Styles } from '@0xproject/react-shared';
|
|||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { MenuItem } from 'ts/components/ui/menu_item';
|
import { MenuItem } from 'ts/components/ui/menu_item';
|
||||||
|
import { colors } from 'ts/style/colors';
|
||||||
import { WebsitePaths } from 'ts/types';
|
import { WebsitePaths } from 'ts/types';
|
||||||
import { colors } from 'ts/utils/colors';
|
|
||||||
|
|
||||||
export interface MenuTheme {
|
export interface MenuTheme {
|
||||||
paddingLeft: number;
|
paddingLeft: number;
|
||||||
|
@ -34,6 +34,7 @@ import { Dispatcher } from 'ts/redux/dispatcher';
|
|||||||
import {
|
import {
|
||||||
BlockchainErrs,
|
BlockchainErrs,
|
||||||
HashData,
|
HashData,
|
||||||
|
ItemByAddress,
|
||||||
Order,
|
Order,
|
||||||
ProviderType,
|
ProviderType,
|
||||||
ScreenWidths,
|
ScreenWidths,
|
||||||
@ -43,6 +44,7 @@ import {
|
|||||||
TokenVisibility,
|
TokenVisibility,
|
||||||
WebsitePaths,
|
WebsitePaths,
|
||||||
} from 'ts/types';
|
} from 'ts/types';
|
||||||
|
import { backendClient } from 'ts/utils/backend_client';
|
||||||
import { configs } from 'ts/utils/configs';
|
import { configs } from 'ts/utils/configs';
|
||||||
import { constants } from 'ts/utils/constants';
|
import { constants } from 'ts/utils/constants';
|
||||||
import { orderParser } from 'ts/utils/order_parser';
|
import { orderParser } from 'ts/utils/order_parser';
|
||||||
@ -266,10 +268,6 @@ export class Portal extends React.Component<PortalProps, PortalState> {
|
|||||||
toggleDialogFn={updateShouldBlockchainErrDialogBeOpen}
|
toggleDialogFn={updateShouldBlockchainErrDialogBeOpen}
|
||||||
networkId={this.props.networkId}
|
networkId={this.props.networkId}
|
||||||
/>
|
/>
|
||||||
<PortalDisclaimerDialog
|
|
||||||
isOpen={this.state.isDisclaimerDialogOpen}
|
|
||||||
onToggleDialog={this._onPortalDisclaimerAccepted.bind(this)}
|
|
||||||
/>
|
|
||||||
<FlashMessage dispatcher={this.props.dispatcher} flashMessage={this.props.flashMessage} />
|
<FlashMessage dispatcher={this.props.dispatcher} flashMessage={this.props.flashMessage} />
|
||||||
{this.props.blockchainIsLoaded && (
|
{this.props.blockchainIsLoaded && (
|
||||||
<LedgerConfigDialog
|
<LedgerConfigDialog
|
||||||
@ -394,18 +392,24 @@ export class Portal extends React.Component<PortalProps, PortalState> {
|
|||||||
},
|
},
|
||||||
];
|
];
|
||||||
return (
|
return (
|
||||||
<Switch>
|
<div>
|
||||||
{_.map(accountManagementItems, item => {
|
<Switch>
|
||||||
return (
|
{_.map(accountManagementItems, item => {
|
||||||
<Route
|
return (
|
||||||
key={item.pathName}
|
<Route
|
||||||
path={item.pathName}
|
key={item.pathName}
|
||||||
render={this._renderAccountManagementItem.bind(this, item)}
|
path={item.pathName}
|
||||||
/>
|
render={this._renderAccountManagementItem.bind(this, item)}
|
||||||
);
|
/>
|
||||||
})}}
|
);
|
||||||
<Route render={this._renderNotFoundMessage.bind(this)} />
|
})}}
|
||||||
</Switch>
|
<Route render={this._renderNotFoundMessage.bind(this)} />
|
||||||
|
</Switch>
|
||||||
|
<PortalDisclaimerDialog
|
||||||
|
isOpen={this.state.isDisclaimerDialogOpen}
|
||||||
|
onToggleDialog={this._onPortalDisclaimerAccepted.bind(this)}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
private _renderAccountManagementItem(item: AccountManagementItem): React.ReactNode {
|
private _renderAccountManagementItem(item: AccountManagementItem): React.ReactNode {
|
||||||
@ -587,6 +591,7 @@ export class Portal extends React.Component<PortalProps, PortalState> {
|
|||||||
return this._blockchain.getTokenBalanceAndAllowanceAsync(userAddressIfExists, tokenAddress);
|
return this._blockchain.getTokenBalanceAndAllowanceAsync(userAddressIfExists, tokenAddress);
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
const priceByAddress = await this._getPriceByAddressAsync(tokenAddresses);
|
||||||
for (let i = 0; i < tokenAddresses.length; i++) {
|
for (let i = 0; i < tokenAddresses.length; i++) {
|
||||||
// Order is preserved in Promise.all
|
// Order is preserved in Promise.all
|
||||||
const [balance, allowance] = balancesAndAllowances[i];
|
const [balance, allowance] = balancesAndAllowances[i];
|
||||||
@ -595,6 +600,7 @@ export class Portal extends React.Component<PortalProps, PortalState> {
|
|||||||
balance,
|
balance,
|
||||||
allowance,
|
allowance,
|
||||||
isLoaded: true,
|
isLoaded: true,
|
||||||
|
price: priceByAddress[tokenAddress],
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
this.setState({
|
this.setState({
|
||||||
@ -602,6 +608,34 @@ export class Portal extends React.Component<PortalProps, PortalState> {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async _getPriceByAddressAsync(tokenAddresses: string[]): Promise<ItemByAddress<BigNumber>> {
|
||||||
|
if (_.isEmpty(tokenAddresses)) {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
// for each input token address, search for the corresponding symbol in this.props.tokenByAddress, if it exists
|
||||||
|
// create a mapping from existing symbols -> address
|
||||||
|
const tokenAddressBySymbol: { [symbol: string]: string } = {};
|
||||||
|
_.each(tokenAddresses, address => {
|
||||||
|
const tokenIfExists = _.get(this.props.tokenByAddress, address);
|
||||||
|
if (!_.isUndefined(tokenIfExists)) {
|
||||||
|
const symbol = tokenIfExists.symbol;
|
||||||
|
tokenAddressBySymbol[symbol] = address;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const tokenSymbols = _.keys(tokenAddressBySymbol);
|
||||||
|
try {
|
||||||
|
const priceBySymbol = await backendClient.getPriceInfoAsync(tokenSymbols);
|
||||||
|
const priceByAddress = _.mapKeys(priceBySymbol, (value, symbol) => _.get(tokenAddressBySymbol, symbol));
|
||||||
|
const result = _.mapValues(priceByAddress, price => {
|
||||||
|
const priceBigNumber = new BigNumber(price);
|
||||||
|
return priceBigNumber;
|
||||||
|
});
|
||||||
|
return result;
|
||||||
|
} catch (err) {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private async _refetchTokenStateAsync(tokenAddress: string): Promise<void> {
|
private async _refetchTokenStateAsync(tokenAddress: string): Promise<void> {
|
||||||
await this._fetchBalancesAndAllowancesAsync([tokenAddress]);
|
await this._fetchBalancesAndAllowancesAsync([tokenAddress]);
|
||||||
}
|
}
|
||||||
|
@ -6,8 +6,8 @@ import * as React from 'react';
|
|||||||
import { TopTokens } from 'ts/components/relayer_index/relayer_top_tokens';
|
import { TopTokens } from 'ts/components/relayer_index/relayer_top_tokens';
|
||||||
import { Container } from 'ts/components/ui/container';
|
import { Container } from 'ts/components/ui/container';
|
||||||
import { Island } from 'ts/components/ui/island';
|
import { Island } from 'ts/components/ui/island';
|
||||||
|
import { colors } from 'ts/style/colors';
|
||||||
import { WebsiteBackendRelayerInfo } from 'ts/types';
|
import { WebsiteBackendRelayerInfo } from 'ts/types';
|
||||||
import { colors } from 'ts/utils/colors';
|
|
||||||
|
|
||||||
export interface RelayerGridTileProps {
|
export interface RelayerGridTileProps {
|
||||||
relayerInfo: WebsiteBackendRelayerInfo;
|
relayerInfo: WebsiteBackendRelayerInfo;
|
||||||
|
@ -6,9 +6,9 @@ import { GridList } from 'material-ui/GridList';
|
|||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
|
|
||||||
import { RelayerGridTile } from 'ts/components/relayer_index/relayer_grid_tile';
|
import { RelayerGridTile } from 'ts/components/relayer_index/relayer_grid_tile';
|
||||||
|
import { colors } from 'ts/style/colors';
|
||||||
import { ScreenWidths, WebsiteBackendRelayerInfo } from 'ts/types';
|
import { ScreenWidths, WebsiteBackendRelayerInfo } from 'ts/types';
|
||||||
import { backendClient } from 'ts/utils/backend_client';
|
import { backendClient } from 'ts/utils/backend_client';
|
||||||
import { colors } from 'ts/utils/colors';
|
|
||||||
|
|
||||||
export interface RelayerIndexProps {
|
export interface RelayerIndexProps {
|
||||||
networkId: number;
|
networkId: number;
|
||||||
|
@ -76,11 +76,11 @@ interface TokenBalancesProps {
|
|||||||
|
|
||||||
interface TokenBalancesState {
|
interface TokenBalancesState {
|
||||||
errorType: BalanceErrs;
|
errorType: BalanceErrs;
|
||||||
|
trackedTokenStateByAddress: TokenStateByAddress;
|
||||||
isBalanceSpinnerVisible: boolean;
|
isBalanceSpinnerVisible: boolean;
|
||||||
isZRXSpinnerVisible: boolean;
|
isZRXSpinnerVisible: boolean;
|
||||||
isTokenPickerOpen: boolean;
|
isTokenPickerOpen: boolean;
|
||||||
isAddingToken: boolean;
|
isAddingToken: boolean;
|
||||||
trackedTokenStateByAddress: TokenStateByAddress;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export class TokenBalances extends React.Component<TokenBalancesProps, TokenBalancesState> {
|
export class TokenBalances extends React.Component<TokenBalancesProps, TokenBalancesState> {
|
||||||
|
@ -9,8 +9,9 @@ import { ProviderPicker } from 'ts/components/top_bar/provider_picker';
|
|||||||
import { DropDown } from 'ts/components/ui/drop_down';
|
import { DropDown } from 'ts/components/ui/drop_down';
|
||||||
import { Identicon } from 'ts/components/ui/identicon';
|
import { Identicon } from 'ts/components/ui/identicon';
|
||||||
import { Dispatcher } from 'ts/redux/dispatcher';
|
import { Dispatcher } from 'ts/redux/dispatcher';
|
||||||
|
import { colors } from 'ts/style/colors';
|
||||||
|
import { zIndex } from 'ts/style/z_index';
|
||||||
import { ProviderType } from 'ts/types';
|
import { ProviderType } from 'ts/types';
|
||||||
import { colors } from 'ts/utils/colors';
|
|
||||||
import { constants } from 'ts/utils/constants';
|
import { constants } from 'ts/utils/constants';
|
||||||
import { utils } from 'ts/utils/utils';
|
import { utils } from 'ts/utils/utils';
|
||||||
|
|
||||||
|
@ -13,9 +13,9 @@ import { ProviderDisplay } from 'ts/components/top_bar/provider_display';
|
|||||||
import { TopBarMenuItem } from 'ts/components/top_bar/top_bar_menu_item';
|
import { TopBarMenuItem } from 'ts/components/top_bar/top_bar_menu_item';
|
||||||
import { DropDown } from 'ts/components/ui/drop_down';
|
import { DropDown } from 'ts/components/ui/drop_down';
|
||||||
import { Dispatcher } from 'ts/redux/dispatcher';
|
import { Dispatcher } from 'ts/redux/dispatcher';
|
||||||
|
import { zIndex } from 'ts/style/z_index';
|
||||||
import { Deco, Key, ProviderType, WebsiteLegacyPaths, WebsitePaths } from 'ts/types';
|
import { Deco, Key, ProviderType, WebsiteLegacyPaths, WebsitePaths } from 'ts/types';
|
||||||
import { constants } from 'ts/utils/constants';
|
import { constants } from 'ts/utils/constants';
|
||||||
import { zIndex } from 'ts/utils/style';
|
|
||||||
import { Translate } from 'ts/utils/translate';
|
import { Translate } from 'ts/utils/translate';
|
||||||
import { utils } from 'ts/utils/utils';
|
import { utils } from 'ts/utils/utils';
|
||||||
|
|
||||||
|
79
packages/website/ts/components/ui/button.tsx
Normal file
79
packages/website/ts/components/ui/button.tsx
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
import { colors } from '@0xproject/react-shared';
|
||||||
|
import { darken } from 'polished';
|
||||||
|
import * as React from 'react';
|
||||||
|
import { styled } from 'ts/style/theme';
|
||||||
|
|
||||||
|
export interface ButtonProps {
|
||||||
|
className?: string;
|
||||||
|
fontSize?: string;
|
||||||
|
fontColor?: string;
|
||||||
|
backgroundColor?: string;
|
||||||
|
borderColor?: string;
|
||||||
|
width?: string;
|
||||||
|
type?: string;
|
||||||
|
onClick?: (event: React.MouseEvent<HTMLElement>) => void;
|
||||||
|
}
|
||||||
|
|
||||||
|
const PlainButton: React.StatelessComponent<ButtonProps> = ({ children, onClick, type, className }) => (
|
||||||
|
<button type={type} className={className} onClick={onClick}>
|
||||||
|
{children}
|
||||||
|
</button>
|
||||||
|
);
|
||||||
|
|
||||||
|
export const Button = styled(PlainButton)`
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: ${props => props.fontSize};
|
||||||
|
color: ${props => props.fontColor};
|
||||||
|
padding: 0.8em 2.2em;
|
||||||
|
border-radius: 6px;
|
||||||
|
box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.25);
|
||||||
|
font-weight: 500;
|
||||||
|
font-family: 'Roboto';
|
||||||
|
width: ${props => props.width};
|
||||||
|
background-color: ${props => props.backgroundColor};
|
||||||
|
border: ${props => (props.borderColor ? `1px solid ${props.borderColor}` : 'none')};
|
||||||
|
&:hover {
|
||||||
|
background-color: ${props => darken(0.1, props.backgroundColor)};
|
||||||
|
}
|
||||||
|
&:active {
|
||||||
|
background-color: ${props => darken(0.2, props.backgroundColor)};
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
||||||
|
Button.defaultProps = {
|
||||||
|
fontSize: '12px',
|
||||||
|
backgroundColor: colors.white,
|
||||||
|
width: 'auto',
|
||||||
|
};
|
||||||
|
|
||||||
|
Button.displayName = 'Button';
|
||||||
|
|
||||||
|
type CallToActionType = 'light' | 'dark';
|
||||||
|
|
||||||
|
export interface CallToActionProps {
|
||||||
|
type?: CallToActionType;
|
||||||
|
fontSize?: string;
|
||||||
|
width?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const CallToAction: React.StatelessComponent<CallToActionProps> = ({ children, type, fontSize, width }) => {
|
||||||
|
const isLight = type === 'light';
|
||||||
|
const backgroundColor = isLight ? colors.white : colors.heroGrey;
|
||||||
|
const fontColor = isLight ? colors.heroGrey : colors.white;
|
||||||
|
const borderColor = isLight ? undefined : colors.white;
|
||||||
|
return (
|
||||||
|
<Button
|
||||||
|
fontSize={fontSize}
|
||||||
|
backgroundColor={backgroundColor}
|
||||||
|
fontColor={fontColor}
|
||||||
|
width={width}
|
||||||
|
borderColor={borderColor}
|
||||||
|
>
|
||||||
|
{children}
|
||||||
|
</Button>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
CallToAction.defaultProps = {
|
||||||
|
type: 'dark',
|
||||||
|
};
|
@ -11,13 +11,20 @@ export interface ContainerProps {
|
|||||||
paddingBottom?: StringOrNum;
|
paddingBottom?: StringOrNum;
|
||||||
paddingRight?: StringOrNum;
|
paddingRight?: StringOrNum;
|
||||||
paddingLeft?: StringOrNum;
|
paddingLeft?: StringOrNum;
|
||||||
|
backgroundColor?: string;
|
||||||
|
borderRadius?: StringOrNum;
|
||||||
maxWidth?: StringOrNum;
|
maxWidth?: StringOrNum;
|
||||||
children?: React.ReactNode;
|
isHidden?: boolean;
|
||||||
|
className?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const Container: React.StatelessComponent<ContainerProps> = (props: ContainerProps) => {
|
export const Container: React.StatelessComponent<ContainerProps> = ({ children, className, isHidden, ...style }) => {
|
||||||
const { children, ...style } = props;
|
const visibility = isHidden ? 'hidden' : undefined;
|
||||||
return <div style={style}>{children}</div>;
|
return (
|
||||||
|
<div style={{ ...style, visibility }} className={className}>
|
||||||
|
{children}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
Container.displayName = 'Container';
|
Container.displayName = 'Container';
|
||||||
|
43
packages/website/ts/components/ui/input.tsx
Normal file
43
packages/website/ts/components/ui/input.tsx
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
import { colors } from '@0xproject/react-shared';
|
||||||
|
import * as React from 'react';
|
||||||
|
import { styled } from 'ts/style/theme';
|
||||||
|
|
||||||
|
export interface InputProps {
|
||||||
|
className?: string;
|
||||||
|
value?: string;
|
||||||
|
width?: string;
|
||||||
|
fontSize?: string;
|
||||||
|
fontColor?: string;
|
||||||
|
placeholderColor?: string;
|
||||||
|
placeholder?: string;
|
||||||
|
backgroundColor?: string;
|
||||||
|
onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;
|
||||||
|
}
|
||||||
|
|
||||||
|
const PlainInput: React.StatelessComponent<InputProps> = ({ value, className, placeholder, onChange }) => (
|
||||||
|
<input className={className} value={value} onChange={onChange} placeholder={placeholder} />
|
||||||
|
);
|
||||||
|
|
||||||
|
export const Input = styled(PlainInput)`
|
||||||
|
font-size: ${props => props.fontSize};
|
||||||
|
width: ${props => props.width};
|
||||||
|
padding: 0.8em 1.2em;
|
||||||
|
border-radius: 3px;
|
||||||
|
font-family: 'Roboto Mono';
|
||||||
|
color: ${props => props.fontColor};
|
||||||
|
border: none;
|
||||||
|
background-color: ${props => props.backgroundColor};
|
||||||
|
&::placeholder {
|
||||||
|
color: ${props => props.placeholderColor};
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
||||||
|
Input.defaultProps = {
|
||||||
|
width: 'auto',
|
||||||
|
backgroundColor: colors.white,
|
||||||
|
fontColor: colors.darkestGrey,
|
||||||
|
placeholderColor: colors.darkGrey,
|
||||||
|
fontSize: '12px',
|
||||||
|
};
|
||||||
|
|
||||||
|
Input.displayName = 'Input';
|
@ -1,5 +1,5 @@
|
|||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { colors } from 'ts/utils/colors';
|
import { colors } from 'ts/style/colors';
|
||||||
|
|
||||||
export interface IslandProps {
|
export interface IslandProps {
|
||||||
style?: React.CSSProperties;
|
style?: React.CSSProperties;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
|
|
||||||
import { zIndex } from 'ts/utils/style';
|
import { zIndex } from 'ts/style/z_index';
|
||||||
|
|
||||||
export interface OverlayProps {
|
export interface OverlayProps {
|
||||||
children?: React.ReactNode;
|
children?: React.ReactNode;
|
||||||
|
41
packages/website/ts/components/ui/text.tsx
Normal file
41
packages/website/ts/components/ui/text.tsx
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
import { colors } from '@0xproject/react-shared';
|
||||||
|
import * as React from 'react';
|
||||||
|
import { styled } from 'ts/style/theme';
|
||||||
|
import { Deco, Key } from 'ts/types';
|
||||||
|
import { Translate } from 'ts/utils/translate';
|
||||||
|
|
||||||
|
export type TextTag = 'p' | 'div' | 'span' | 'label';
|
||||||
|
|
||||||
|
export interface TextProps {
|
||||||
|
className?: string;
|
||||||
|
Tag?: TextTag;
|
||||||
|
fontSize?: string;
|
||||||
|
fontFamily?: string;
|
||||||
|
fontColor?: string;
|
||||||
|
lineHeight?: string;
|
||||||
|
center?: boolean;
|
||||||
|
fontWeight?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
const PlainText: React.StatelessComponent<TextProps> = ({ children, className, Tag }) => (
|
||||||
|
<Tag className={className}>{children}</Tag>
|
||||||
|
);
|
||||||
|
|
||||||
|
export const Text = styled(PlainText)`
|
||||||
|
font-family: ${props => props.fontFamily};
|
||||||
|
font-weight: ${props => props.fontWeight};
|
||||||
|
font-size: ${props => props.fontSize};
|
||||||
|
${props => (props.lineHeight ? `line-height: ${props.lineHeight}` : '')};
|
||||||
|
${props => (props.center ? 'text-align: center' : '')};
|
||||||
|
color: ${props => props.fontColor};
|
||||||
|
`;
|
||||||
|
|
||||||
|
Text.defaultProps = {
|
||||||
|
fontFamily: 'Roboto',
|
||||||
|
fontWeight: 400,
|
||||||
|
fontColor: colors.white,
|
||||||
|
fontSize: '14px',
|
||||||
|
Tag: 'div',
|
||||||
|
};
|
||||||
|
|
||||||
|
Text.displayName = 'Text';
|
@ -22,6 +22,8 @@ import { TokenIcon } from 'ts/components/ui/token_icon';
|
|||||||
import { WalletDisconnectedItem } from 'ts/components/wallet/wallet_disconnected_item';
|
import { WalletDisconnectedItem } from 'ts/components/wallet/wallet_disconnected_item';
|
||||||
import { WrapEtherItem } from 'ts/components/wallet/wrap_ether_item';
|
import { WrapEtherItem } from 'ts/components/wallet/wrap_ether_item';
|
||||||
import { Dispatcher } from 'ts/redux/dispatcher';
|
import { Dispatcher } from 'ts/redux/dispatcher';
|
||||||
|
import { colors } from 'ts/style/colors';
|
||||||
|
import { zIndex } from 'ts/style/z_index';
|
||||||
import {
|
import {
|
||||||
BlockchainErrs,
|
BlockchainErrs,
|
||||||
ProviderType,
|
ProviderType,
|
||||||
@ -33,9 +35,7 @@ import {
|
|||||||
TokenStateByAddress,
|
TokenStateByAddress,
|
||||||
WebsitePaths,
|
WebsitePaths,
|
||||||
} from 'ts/types';
|
} from 'ts/types';
|
||||||
import { colors } from 'ts/utils/colors';
|
|
||||||
import { constants } from 'ts/utils/constants';
|
import { constants } from 'ts/utils/constants';
|
||||||
import { zIndex } from 'ts/utils/style';
|
|
||||||
import { utils } from 'ts/utils/utils';
|
import { utils } from 'ts/utils/utils';
|
||||||
import { styles as walletItemStyles } from 'ts/utils/wallet_item_styles';
|
import { styles as walletItemStyles } from 'ts/utils/wallet_item_styles';
|
||||||
|
|
||||||
@ -496,6 +496,20 @@ export class Wallet extends React.Component<WalletProps, WalletState> {
|
|||||||
<IconButton iconName={buttonIconName} labelText={buttonLabel} onClick={onClick} color={colors.mediumBlue} />
|
<IconButton iconName={buttonIconName} labelText={buttonLabel} onClick={onClick} color={colors.mediumBlue} />
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
<<<<<<< HEAD
|
||||||
|
=======
|
||||||
|
private _getInitialTrackedTokenStateByAddress(tokenAddresses: string[]): TokenStateByAddress {
|
||||||
|
const trackedTokenStateByAddress: TokenStateByAddress = {};
|
||||||
|
_.each(tokenAddresses, tokenAddress => {
|
||||||
|
trackedTokenStateByAddress[tokenAddress] = {
|
||||||
|
balance: new BigNumber(0),
|
||||||
|
allowance: new BigNumber(0),
|
||||||
|
isLoaded: false,
|
||||||
|
};
|
||||||
|
});
|
||||||
|
return trackedTokenStateByAddress;
|
||||||
|
}
|
||||||
|
>>>>>>> v2-prototype
|
||||||
private _openWrappedEtherActionRow(wrappedEtherDirection: Side): void {
|
private _openWrappedEtherActionRow(wrappedEtherDirection: Side): void {
|
||||||
this.setState({
|
this.setState({
|
||||||
wrappedEtherDirection,
|
wrappedEtherDirection,
|
||||||
|
@ -2,8 +2,8 @@ import { Styles } from '@0xproject/react-shared';
|
|||||||
import FlatButton from 'material-ui/FlatButton';
|
import FlatButton from 'material-ui/FlatButton';
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
|
|
||||||
|
import { colors } from 'ts/style/colors';
|
||||||
import { ProviderType } from 'ts/types';
|
import { ProviderType } from 'ts/types';
|
||||||
import { colors } from 'ts/utils/colors';
|
|
||||||
import { constants } from 'ts/utils/constants';
|
import { constants } from 'ts/utils/constants';
|
||||||
import { utils } from 'ts/utils/utils';
|
import { utils } from 'ts/utils/utils';
|
||||||
|
|
||||||
|
@ -9,8 +9,8 @@ import { Blockchain } from 'ts/blockchain';
|
|||||||
import { EthAmountInput } from 'ts/components/inputs/eth_amount_input';
|
import { EthAmountInput } from 'ts/components/inputs/eth_amount_input';
|
||||||
import { TokenAmountInput } from 'ts/components/inputs/token_amount_input';
|
import { TokenAmountInput } from 'ts/components/inputs/token_amount_input';
|
||||||
import { Dispatcher } from 'ts/redux/dispatcher';
|
import { Dispatcher } from 'ts/redux/dispatcher';
|
||||||
|
import { colors } from 'ts/style/colors';
|
||||||
import { BlockchainCallErrs, Side, Token } from 'ts/types';
|
import { BlockchainCallErrs, Side, Token } from 'ts/types';
|
||||||
import { colors } from 'ts/utils/colors';
|
|
||||||
import { constants } from 'ts/utils/constants';
|
import { constants } from 'ts/utils/constants';
|
||||||
import { errorReporter } from 'ts/utils/error_reporter';
|
import { errorReporter } from 'ts/utils/error_reporter';
|
||||||
import { utils } from 'ts/utils/utils';
|
import { utils } from 'ts/utils/utils';
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
import { colors } from '@0xproject/react-shared';
|
import { colors } from '@0xproject/react-shared';
|
||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
import RaisedButton from 'material-ui/RaisedButton';
|
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import DocumentTitle = require('react-document-title');
|
import DocumentTitle = require('react-document-title');
|
||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import { Footer } from 'ts/components/footer';
|
import { Footer } from 'ts/components/footer';
|
||||||
|
import { SubscribeForm } from 'ts/components/forms/subscribe_form';
|
||||||
import { TopBar } from 'ts/components/top_bar/top_bar';
|
import { TopBar } from 'ts/components/top_bar/top_bar';
|
||||||
|
import { CallToAction } from 'ts/components/ui/button';
|
||||||
|
import { Container } from 'ts/components/ui/container';
|
||||||
import { Dispatcher } from 'ts/redux/dispatcher';
|
import { Dispatcher } from 'ts/redux/dispatcher';
|
||||||
import { Deco, Key, ScreenWidths, WebsitePaths } from 'ts/types';
|
import { Deco, Key, ScreenWidths, WebsitePaths } from 'ts/types';
|
||||||
import { constants } from 'ts/utils/constants';
|
import { constants } from 'ts/utils/constants';
|
||||||
@ -236,7 +238,7 @@ export class Landing extends React.Component<LandingProps, LandingState> {
|
|||||||
<div className="clearfix py4" style={{ backgroundColor: colors.heroGrey }}>
|
<div className="clearfix py4" style={{ backgroundColor: colors.heroGrey }}>
|
||||||
<div className="mx-auto max-width-4 clearfix">
|
<div className="mx-auto max-width-4 clearfix">
|
||||||
{this._renderWhatsNew()}
|
{this._renderWhatsNew()}
|
||||||
<div className="lg-pt4 md-pt4 sm-pt2 lg-pb4 md-pb4 lg-my4 md-my4 sm-mt2 sm-mb4 clearfix">
|
<div className="lg-pt4 md-pt4 sm-pt2 lg-pb4 md-pb4 lg-mt4 md-mt4 sm-mt2 sm-mb4 clearfix">
|
||||||
<div className="col lg-col-5 md-col-5 col-12 sm-center">
|
<div className="col lg-col-5 md-col-5 col-12 sm-center">
|
||||||
<img src="/images/landing/hero_chip_image.png" height={isSmallScreen ? 300 : 395} />
|
<img src="/images/landing/hero_chip_image.png" height={isSmallScreen ? 300 : 395} />
|
||||||
</div>
|
</div>
|
||||||
@ -268,40 +270,31 @@ export class Landing extends React.Component<LandingProps, LandingState> {
|
|||||||
>
|
>
|
||||||
{this.props.translate.get(Key.TopTagline)}
|
{this.props.translate.get(Key.TopTagline)}
|
||||||
</div>
|
</div>
|
||||||
<div className="pt3 clearfix sm-mx-auto" style={{ maxWidth: 389 }}>
|
<Container className="pt3 clearfix sm-mx-auto" maxWidth="390px">
|
||||||
<div className="lg-pr2 md-pr2 col col-6 sm-center">
|
<div className="lg-pr2 md-pr2 lg-col lg-col-6 sm-center sm-col sm-col-12 mb2">
|
||||||
<Link to={WebsitePaths.ZeroExJs} className="text-decoration-none">
|
<Link to={WebsitePaths.ZeroExJs} className="text-decoration-none">
|
||||||
<RaisedButton
|
<CallToAction width="175px" type="light">
|
||||||
style={{ borderRadius: 6, minWidth: 157.36 }}
|
{this.props.translate.get(Key.BuildCallToAction, Deco.Cap)}
|
||||||
buttonStyle={{ borderRadius: 6 }}
|
</CallToAction>
|
||||||
labelStyle={buttonLabelStyle}
|
|
||||||
label={this.props.translate.get(Key.BuildCallToAction, Deco.Cap)}
|
|
||||||
onClick={_.noop}
|
|
||||||
/>
|
|
||||||
</Link>
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
<div className="col col-6 sm-center">
|
<div className="lg-col lg-col-6 sm-center sm-col sm-col-12">
|
||||||
<a
|
<a
|
||||||
href={constants.URL_ZEROEX_CHAT}
|
href={constants.URL_ZEROEX_CHAT}
|
||||||
target="_blank"
|
target="_blank"
|
||||||
className="text-decoration-none"
|
className="text-decoration-none"
|
||||||
>
|
>
|
||||||
<RaisedButton
|
<CallToAction width="175px">
|
||||||
style={{ borderRadius: 6, minWidth: 150 }}
|
{this.props.translate.get(Key.CommunityCallToAction, Deco.Cap)}
|
||||||
buttonStyle={lightButtonStyle}
|
</CallToAction>
|
||||||
labelColor="white"
|
|
||||||
backgroundColor={colors.heroGrey}
|
|
||||||
labelStyle={buttonLabelStyle}
|
|
||||||
label={this.props.translate.get(Key.CommunityCallToAction, Deco.Cap)}
|
|
||||||
onClick={_.noop}
|
|
||||||
/>
|
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</Container>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
{this.props.translate.getLanguage() === Language.English && <SubscribeForm />}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -349,6 +342,9 @@ export class Landing extends React.Component<LandingProps, LandingState> {
|
|||||||
case ScreenWidths.Lg:
|
case ScreenWidths.Lg:
|
||||||
colWidth = isRelayersOnly ? 2 : 2 - i % 2;
|
colWidth = isRelayersOnly ? 2 : 2 - i % 2;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
throw new Error(`Encountered unknown ScreenWidths value: ${this.state.screenWidth}`);
|
||||||
}
|
}
|
||||||
return (
|
return (
|
||||||
<div key={`project-${project.logoFileName}`} className={`col col-${colWidth} center`}>
|
<div key={`project-${project.logoFileName}`} className={`col col-${colWidth} center`}>
|
||||||
@ -782,15 +778,9 @@ export class Landing extends React.Component<LandingProps, LandingState> {
|
|||||||
</div>
|
</div>
|
||||||
<div className="sm-center sm-pt2 lg-table-cell md-table-cell">
|
<div className="sm-center sm-pt2 lg-table-cell md-table-cell">
|
||||||
<Link to={WebsitePaths.ZeroExJs} className="text-decoration-none">
|
<Link to={WebsitePaths.ZeroExJs} className="text-decoration-none">
|
||||||
<RaisedButton
|
<CallToAction fontSize="15px">
|
||||||
style={{ borderRadius: 6, minWidth: 150 }}
|
{this.props.translate.get(Key.BuildCallToAction, Deco.Cap)}
|
||||||
buttonStyle={lightButtonStyle}
|
</CallToAction>
|
||||||
labelColor={colors.white}
|
|
||||||
backgroundColor={colors.heroGrey}
|
|
||||||
labelStyle={buttonLabelStyle}
|
|
||||||
label={this.props.translate.get(Key.BuildCallToAction, Deco.Cap)}
|
|
||||||
onClick={_.noop}
|
|
||||||
/>
|
|
||||||
</Link>
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
15
packages/website/ts/style/theme.ts
Normal file
15
packages/website/ts/style/theme.ts
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
import * as styledComponents from 'styled-components';
|
||||||
|
|
||||||
|
const {
|
||||||
|
default: styled,
|
||||||
|
css,
|
||||||
|
injectGlobal,
|
||||||
|
keyframes,
|
||||||
|
ThemeProvider,
|
||||||
|
} = styledComponents as styledComponents.ThemedStyledComponentsModule<IThemeInterface>;
|
||||||
|
|
||||||
|
export interface IThemeInterface {}
|
||||||
|
|
||||||
|
export const theme = {};
|
||||||
|
|
||||||
|
export { styled, css, injectGlobal, keyframes, ThemeProvider };
|
@ -8,6 +8,7 @@ const ETH_GAS_STATION_ENDPOINT = '/eth_gas_station';
|
|||||||
const PRICES_ENDPOINT = '/prices';
|
const PRICES_ENDPOINT = '/prices';
|
||||||
const RELAYERS_ENDPOINT = '/relayers';
|
const RELAYERS_ENDPOINT = '/relayers';
|
||||||
const WIKI_ENDPOINT = '/wiki';
|
const WIKI_ENDPOINT = '/wiki';
|
||||||
|
const SUBSCRIBE_SUBSTACK_NEWSLETTER_ENDPOINT = '/newsletter_subscriber/substack';
|
||||||
|
|
||||||
export const backendClient = {
|
export const backendClient = {
|
||||||
async getGasInfoAsync(): Promise<WebsiteBackendGasInfo> {
|
async getGasInfoAsync(): Promise<WebsiteBackendGasInfo> {
|
||||||
@ -33,4 +34,11 @@ export const backendClient = {
|
|||||||
const result = await fetchUtils.requestAsync(utils.getBackendBaseUrl(), WIKI_ENDPOINT);
|
const result = await fetchUtils.requestAsync(utils.getBackendBaseUrl(), WIKI_ENDPOINT);
|
||||||
return result;
|
return result;
|
||||||
},
|
},
|
||||||
|
async subscribeToNewsletterAsync(email: string): Promise<Response> {
|
||||||
|
const result = await fetchUtils.postAsync(utils.getBackendBaseUrl(), SUBSCRIBE_SUBSTACK_NEWSLETTER_ENDPOINT, {
|
||||||
|
email,
|
||||||
|
referrer: window.location.href,
|
||||||
|
});
|
||||||
|
return result;
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
@ -4,22 +4,38 @@ import * as queryString from 'query-string';
|
|||||||
|
|
||||||
import { errorReporter } from 'ts/utils/error_reporter';
|
import { errorReporter } from 'ts/utils/error_reporter';
|
||||||
|
|
||||||
|
const logErrorIfPresent = (response: Response, requestedURL: string) => {
|
||||||
|
if (response.status !== 200) {
|
||||||
|
const errorText = `Error requesting url: ${requestedURL}, ${response.status}: ${response.statusText}`;
|
||||||
|
logUtils.log(errorText);
|
||||||
|
const error = Error(errorText);
|
||||||
|
// tslint:disable-next-line:no-floating-promises
|
||||||
|
errorReporter.reportAsync(error);
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
export const fetchUtils = {
|
export const fetchUtils = {
|
||||||
async requestAsync(baseUrl: string, path: string, queryParams?: object): Promise<any> {
|
async requestAsync(baseUrl: string, path: string, queryParams?: object): Promise<any> {
|
||||||
const query = queryStringFromQueryParams(queryParams);
|
const query = queryStringFromQueryParams(queryParams);
|
||||||
const url = `${baseUrl}${path}${query}`;
|
const url = `${baseUrl}${path}${query}`;
|
||||||
const response = await fetch(url);
|
const response = await fetch(url);
|
||||||
if (response.status !== 200) {
|
logErrorIfPresent(response, url);
|
||||||
const errorText = `Error requesting url: ${url}, ${response.status}: ${response.statusText}`;
|
|
||||||
logUtils.log(errorText);
|
|
||||||
const error = Error(errorText);
|
|
||||||
// tslint:disable-next-line:no-floating-promises
|
|
||||||
errorReporter.reportAsync(error);
|
|
||||||
throw error;
|
|
||||||
}
|
|
||||||
const result = await response.json();
|
const result = await response.json();
|
||||||
return result;
|
return result;
|
||||||
},
|
},
|
||||||
|
async postAsync(baseUrl: string, path: string, body: object): Promise<Response> {
|
||||||
|
const url = `${baseUrl}${path}`;
|
||||||
|
const response = await fetch(url, {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
},
|
||||||
|
body: JSON.stringify(body),
|
||||||
|
});
|
||||||
|
logErrorIfPresent(response, url);
|
||||||
|
return response;
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
function queryStringFromQueryParams(queryParams?: object): string {
|
function queryStringFromQueryParams(queryParams?: object): string {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { Styles } from '@0xproject/react-shared';
|
import { Styles } from '@0xproject/react-shared';
|
||||||
|
|
||||||
import { colors } from 'ts/utils/colors';
|
import { colors } from 'ts/style/colors';
|
||||||
|
|
||||||
export const styles: Styles = {
|
export const styles: Styles = {
|
||||||
focusedItem: {
|
focusedItem: {
|
||||||
|
62
yarn.lock
62
yarn.lock
@ -20,6 +20,19 @@
|
|||||||
query-string "^5.0.1"
|
query-string "^5.0.1"
|
||||||
websocket "^1.0.25"
|
websocket "^1.0.25"
|
||||||
|
|
||||||
|
"@0xproject/fill-scenarios@^0.0.2":
|
||||||
|
version "0.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/@0xproject/fill-scenarios/-/fill-scenarios-0.0.2.tgz#176ac2cba13f527e84346fbf06da84965a852bab"
|
||||||
|
dependencies:
|
||||||
|
"@0xproject/base-contract" "^0.3.2"
|
||||||
|
"@0xproject/order-utils" "^0.0.5"
|
||||||
|
"@0xproject/types" "^0.7.0"
|
||||||
|
"@0xproject/typescript-typings" "^0.3.2"
|
||||||
|
"@0xproject/utils" "^0.6.2"
|
||||||
|
"@0xproject/web3-wrapper" "^0.6.4"
|
||||||
|
ethers "^3.0.15"
|
||||||
|
lodash "^4.17.4"
|
||||||
|
|
||||||
"@0xproject/json-schemas@0.7.22":
|
"@0xproject/json-schemas@0.7.22":
|
||||||
version "0.7.22"
|
version "0.7.22"
|
||||||
resolved "https://registry.yarnpkg.com/@0xproject/json-schemas/-/json-schemas-0.7.22.tgz#95cbdc9ec0eff3d1920903960284d491eb668f28"
|
resolved "https://registry.yarnpkg.com/@0xproject/json-schemas/-/json-schemas-0.7.22.tgz#95cbdc9ec0eff3d1920903960284d491eb668f28"
|
||||||
@ -38,7 +51,7 @@
|
|||||||
jsonschema "^1.2.0"
|
jsonschema "^1.2.0"
|
||||||
lodash.values "^4.3.0"
|
lodash.values "^4.3.0"
|
||||||
|
|
||||||
"@0xproject/order-utils@0.0.5":
|
"@0xproject/order-utils@0.0.5", "@0xproject/order-utils@^0.0.5":
|
||||||
version "0.0.5"
|
version "0.0.5"
|
||||||
resolved "https://registry.yarnpkg.com/@0xproject/order-utils/-/order-utils-0.0.5.tgz#c8d92a112740b0020e08f13137844f8c183c863b"
|
resolved "https://registry.yarnpkg.com/@0xproject/order-utils/-/order-utils-0.0.5.tgz#c8d92a112740b0020e08f13137844f8c183c863b"
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -2031,7 +2044,7 @@ buffer@^4.3.0:
|
|||||||
ieee754 "^1.1.4"
|
ieee754 "^1.1.4"
|
||||||
isarray "^1.0.0"
|
isarray "^1.0.0"
|
||||||
|
|
||||||
buffer@^5.0.5:
|
buffer@^5.0.3, buffer@^5.0.5:
|
||||||
version "5.1.0"
|
version "5.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.1.0.tgz#c913e43678c7cb7c8bd16afbcddb6c5505e8f9fe"
|
resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.1.0.tgz#c913e43678c7cb7c8bd16afbcddb6c5505e8f9fe"
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -3048,6 +3061,10 @@ crypto-random-string@^1.0.0:
|
|||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e"
|
resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e"
|
||||||
|
|
||||||
|
css-color-keywords@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05"
|
||||||
|
|
||||||
css-color-names@0.0.4:
|
css-color-names@0.0.4:
|
||||||
version "0.0.4"
|
version "0.0.4"
|
||||||
resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0"
|
resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0"
|
||||||
@ -3109,6 +3126,14 @@ css-selector-tokenizer@^0.7.0:
|
|||||||
fastparse "^1.1.1"
|
fastparse "^1.1.1"
|
||||||
regexpu-core "^1.0.0"
|
regexpu-core "^1.0.0"
|
||||||
|
|
||||||
|
css-to-react-native@^2.0.3:
|
||||||
|
version "2.2.0"
|
||||||
|
resolved "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-2.2.0.tgz#d524ef7f39a2747a8914e86563669ba35b7cf2e7"
|
||||||
|
dependencies:
|
||||||
|
css-color-keywords "^1.0.0"
|
||||||
|
fbjs "^0.8.5"
|
||||||
|
postcss-value-parser "^3.3.0"
|
||||||
|
|
||||||
cssesc@^0.1.0:
|
cssesc@^0.1.0:
|
||||||
version "0.1.0"
|
version "0.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4"
|
resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4"
|
||||||
@ -4478,7 +4503,7 @@ faye-websocket@~0.11.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
websocket-driver ">=0.5.1"
|
websocket-driver ">=0.5.1"
|
||||||
|
|
||||||
fbjs@^0.8.0, fbjs@^0.8.1, fbjs@^0.8.16, fbjs@^0.8.4, fbjs@^0.8.6, fbjs@^0.8.9:
|
fbjs@^0.8.0, fbjs@^0.8.1, fbjs@^0.8.16, fbjs@^0.8.4, fbjs@^0.8.5, fbjs@^0.8.6, fbjs@^0.8.9:
|
||||||
version "0.8.16"
|
version "0.8.16"
|
||||||
resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db"
|
resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db"
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -8708,6 +8733,10 @@ plur@^2.1.2:
|
|||||||
dependencies:
|
dependencies:
|
||||||
irregular-plurals "^1.0.0"
|
irregular-plurals "^1.0.0"
|
||||||
|
|
||||||
|
polished@^1.9.2:
|
||||||
|
version "1.9.2"
|
||||||
|
resolved "https://registry.npmjs.org/polished/-/polished-1.9.2.tgz#d705cac66f3a3ed1bd38aad863e2c1e269baf6b6"
|
||||||
|
|
||||||
popper.js@^1.14.1:
|
popper.js@^1.14.1:
|
||||||
version "1.14.3"
|
version "1.14.3"
|
||||||
resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.14.3.tgz#1438f98d046acf7b4d78cd502bf418ac64d4f095"
|
resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.14.3.tgz#1438f98d046acf7b4d78cd502bf418ac64d4f095"
|
||||||
@ -9544,6 +9573,10 @@ react-highlight@0xproject/react-highlight:
|
|||||||
react "^15.5.4"
|
react "^15.5.4"
|
||||||
react-dom "^15.5.4"
|
react-dom "^15.5.4"
|
||||||
|
|
||||||
|
react-is@^16.3.1:
|
||||||
|
version "16.4.0"
|
||||||
|
resolved "https://registry.npmjs.org/react-is/-/react-is-16.4.0.tgz#cc9fdc855ac34d2e7d9d2eb7059bbc240d35ffcf"
|
||||||
|
|
||||||
react-markdown@^3.2.2:
|
react-markdown@^3.2.2:
|
||||||
version "3.3.0"
|
version "3.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-3.3.0.tgz#a87cdd822aa9302d6add9687961dd1a82a45d02e"
|
resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-3.3.0.tgz#a87cdd822aa9302d6add9687961dd1a82a45d02e"
|
||||||
@ -11175,6 +11208,29 @@ style-loader@^0.20.2:
|
|||||||
loader-utils "^1.1.0"
|
loader-utils "^1.1.0"
|
||||||
schema-utils "^0.4.5"
|
schema-utils "^0.4.5"
|
||||||
|
|
||||||
|
styled-components@^3.3.0:
|
||||||
|
version "3.3.0"
|
||||||
|
resolved "https://registry.npmjs.org/styled-components/-/styled-components-3.3.0.tgz#335b1b2b673b416cd5ec012010e237ed1f877fe9"
|
||||||
|
dependencies:
|
||||||
|
buffer "^5.0.3"
|
||||||
|
css-to-react-native "^2.0.3"
|
||||||
|
fbjs "^0.8.16"
|
||||||
|
hoist-non-react-statics "^2.5.0"
|
||||||
|
is-plain-object "^2.0.1"
|
||||||
|
prop-types "^15.5.4"
|
||||||
|
react-is "^16.3.1"
|
||||||
|
stylis "^3.5.0"
|
||||||
|
stylis-rule-sheet "^0.0.10"
|
||||||
|
supports-color "^3.2.3"
|
||||||
|
|
||||||
|
stylis-rule-sheet@^0.0.10:
|
||||||
|
version "0.0.10"
|
||||||
|
resolved "https://registry.npmjs.org/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz#44e64a2b076643f4b52e5ff71efc04d8c3c4a430"
|
||||||
|
|
||||||
|
stylis@^3.5.0:
|
||||||
|
version "3.5.0"
|
||||||
|
resolved "https://registry.npmjs.org/stylis/-/stylis-3.5.0.tgz#016fa239663d77f868fef5b67cf201c4b7c701e1"
|
||||||
|
|
||||||
supports-color@3.1.2:
|
supports-color@3.1.2:
|
||||||
version "3.1.2"
|
version "3.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5"
|
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user