Merge branch 'new-contracts'
* new-contracts: (29 commits) Fix a typo Fix a typo in comment Rename shouldCheckTransfer to shouldThrowOnInsufficientBalanceOrAllowance Simplify BigNumber hack use yarn on CI Upgrade to a new node version Make CONTRACTS_COMMIT_HASH a string Use never testrpc snapshot Migrate the rest of the artifacts Change arguments order at isRoundingError Migrate events Migrate constructor arguments Migrate fillOrKillOrder Migrate ZRX_TOKEN_AMOUNT Migrate getUnavailableTakerTokenAmount Migrate PROXY_CONTRACT Migrate batchFillOrKillOrders Migrate batchFillOrders Migrate fillOrder Migrate fillOrdersUpTo and remove min ...
This commit is contained in:
19
circle.yml
19
circle.yml
@@ -1,8 +1,15 @@
|
||||
machine:
|
||||
node:
|
||||
version: 6.1.0
|
||||
version: 6.5.0
|
||||
environment:
|
||||
CONTRACTS_COMMIT_HASH: cd04d7c
|
||||
CONTRACTS_COMMIT_HASH: '414e997'
|
||||
PATH: "${PATH}:${HOME}/${CIRCLE_PROJECT_REPONAME}/node_modules/.bin"
|
||||
|
||||
dependencies:
|
||||
override:
|
||||
- yarn
|
||||
cache_directories:
|
||||
- ~/.cache/yarn
|
||||
|
||||
test:
|
||||
override:
|
||||
@@ -10,7 +17,7 @@ test:
|
||||
- unzip ${CONTRACTS_COMMIT_HASH}.zip -d testrpc_snapshot
|
||||
- npm run testrpc -- --db testrpc_snapshot:
|
||||
background: true
|
||||
- npm run test:coverage
|
||||
- npm run report_test_coverage
|
||||
- if [ $CIRCLE_BRANCH = "master" ]; then npm run test:umd; fi
|
||||
- npm run lint
|
||||
- yarn test:coverage
|
||||
- yarn report_test_coverage
|
||||
- if [ $CIRCLE_BRANCH = "master" ]; then yarn test:umd; fi
|
||||
- yarn lint
|
||||
|
||||
@@ -184,6 +184,10 @@
|
||||
"payable": false,
|
||||
"type": "function"
|
||||
},
|
||||
{
|
||||
"payable": true,
|
||||
"type": "fallback"
|
||||
},
|
||||
{
|
||||
"anonymous": false,
|
||||
"inputs": [
|
||||
@@ -229,7 +233,7 @@
|
||||
"type": "event"
|
||||
}
|
||||
],
|
||||
"unlinked_binary": "0x6060604052341561000c57fe5b5b6107218061001c6000396000f300606060405236156100935763ffffffff60e060020a60003504166306fdde038114610095578063095ea7b31461012557806318160ddd1461015857806323b872dd1461017a5780632e1a7d4d146101b3578063313ce567146101c857806370a08231146101ee57806395d89b411461021c578063a9059cbb146102ac578063d0e30db0146102df578063dd62ed3e146102e9575bfe5b341561009d57fe5b6100a561031d565b6040805160208082528351818301528351919283929083019185019080838382156100eb575b8051825260208311156100eb57601f1990920191602091820191016100cb565b505050905090810190601f1680156101175780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561012d57fe5b610144600160a060020a0360043516602435610345565b604080519115158252519081900360200190f35b341561016057fe5b6101686103b0565b60408051918252519081900360200190f35b341561018257fe5b610144600160a060020a03600435811690602435166044356103b6565b604080519115158252519081900360200190f35b34156101bb57fe5b6101c66004356104a1565b005b34156101d057fe5b6101d8610522565b6040805160ff9092168252519081900360200190f35b34156101f657fe5b610168600160a060020a0360043516610527565b60408051918252519081900360200190f35b341561022457fe5b6100a5610546565b6040805160208082528351818301528351919283929083019185019080838382156100eb575b8051825260208311156100eb57601f1990920191602091820191016100cb565b505050905090810190601f1680156101175780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156102b457fe5b610144600160a060020a0360043516602435610567565b604080519115158252519081900360200190f35b6101c6610607565b005b34156102f157fe5b610168600160a060020a0360043581169060243516610656565b60408051918252519081900360200190f35b60408051808201909152600b815260a960020a6a22ba3432b9102a37b5b2b702602082015281565b600160a060020a03338116600081815260016020908152604080832094871680845294825280832086905580518681529051929493927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b60025481565b600160a060020a0383166000908152602081905260408120546103d99083610683565b600160a060020a0380861660009081526020818152604080832094909455600181528382203390931682529190915220546104149083610683565b600160a060020a03808616600090815260016020908152604080832033851684528252808320949094559186168152908190522054610453908361069c565b600160a060020a038085166000818152602081815260409182902094909455805186815290519193928816926000805160206106d683398151915292918290030190a35060015b9392505050565b600160a060020a0333166000908152602081905260409020546104c49082610683565b600160a060020a0333166000908152602081905260409020556002546104ea9082610683565b600255604051600160a060020a0333169082156108fc029083906000818181858888f19350505050151561051e5760006000fd5b5b50565b601281565b600160a060020a0381166000908152602081905260409020545b919050565b604080518082019091526004815260e360020a630ae8aa8902602082015281565b600160a060020a03331660009081526020819052604081205461058a9083610683565b600160a060020a0333811660009081526020819052604080822093909355908516815220546105b9908361069c565b600160a060020a03808516600081815260208181526040918290209490945580518681529051919333909316926000805160206106d683398151915292918290030190a35060015b92915050565b600160a060020a03331660009081526020819052604090205461062a903461069c565b600160a060020a033316600090815260208190526040902055600254610650903461069c565b6002555b565b600160a060020a038083166000908152600160209081526040808320938516835292905220545b92915050565b6000610691838311156106c4565b508082035b92915050565b60008282016106b98482108015906106b45750838210155b6106c4565b8091505b5092915050565b80151561051e5760006000fd5b5b505600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a72305820d39a3d758ea0042048564f60b0e39c59508468d4de91cd9b7b5f708b554f699c0029",
|
||||
"unlinked_binary": "0x6060604052341561000c57fe5b5b61070b8061001c6000396000f300606060405236156100935763ffffffff60e060020a60003504166306fdde0381146100a4578063095ea7b31461013457806318160ddd1461016757806323b872dd146101895780632e1a7d4d146101c2578063313ce567146101d757806370a08231146101fd57806395d89b411461022b578063a9059cbb146102bb578063d0e30db0146102ee578063dd62ed3e146102f8575b6100a25b61009f61032c565b5b565b005b34156100ac57fe5b6100b461037b565b6040805160208082528351818301528351919283929083019185019080838382156100fa575b8051825260208311156100fa57601f1990920191602091820191016100da565b505050905090810190601f1680156101265780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561013c57fe5b610153600160a060020a03600435166024356103a3565b604080519115158252519081900360200190f35b341561016f57fe5b61017761040e565b60408051918252519081900360200190f35b341561019157fe5b610153600160a060020a0360043581169060243516604435610414565b604080519115158252519081900360200190f35b34156101ca57fe5b6100a26004356104ff565b005b34156101df57fe5b6101e761057c565b6040805160ff9092168252519081900360200190f35b341561020557fe5b610177600160a060020a0360043516610581565b60408051918252519081900360200190f35b341561023357fe5b6100b46105a0565b6040805160208082528351818301528351919283929083019185019080838382156100fa575b8051825260208311156100fa57601f1990920191602091820191016100da565b505050905090810190601f1680156101265780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156102c357fe5b610153600160a060020a03600435166024356105c1565b604080519115158252519081900360200190f35b6100a261032c565b005b341561030057fe5b610177600160a060020a0360043581169060243516610661565b60408051918252519081900360200190f35b600160a060020a03331660009081526020819052604090205461034f903461068e565b600160a060020a033316600090815260208190526040902055600254610375903461068e565b6002555b565b60408051808201909152600b815260a960020a6a22ba3432b9102a37b5b2b702602082015281565b600160a060020a03338116600081815260016020908152604080832094871680845294825280832086905580518681529051929493927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b60025481565b600160a060020a03831660009081526020819052604081205461043790836106a8565b600160a060020a03808616600090815260208181526040808320949094556001815283822033909316825291909152205461047290836106a8565b600160a060020a038086166000908152600160209081526040808320338516845282528083209490945591861681529081905220546104b1908361068e565b600160a060020a038085166000818152602081815260409182902094909455805186815290519193928816926000805160206106c083398151915292918290030190a35060015b9392505050565b600160a060020a03331660009081526020819052604090205461052290826106a8565b600160a060020a03331660009081526020819052604090205560025461054890826106a8565b600255604051600160a060020a0333169082156108fc029083906000818181858888f19350505050151561057857fe5b5b50565b601281565b600160a060020a0381166000908152602081905260409020545b919050565b604080518082019091526004815260e360020a630ae8aa8902602082015281565b600160a060020a0333166000908152602081905260408120546105e490836106a8565b600160a060020a033381166000908152602081905260408082209390935590851681522054610613908361068e565b600160a060020a03808516600081815260208181526040918290209490945580518681529051919333909316926000805160206106c083398151915292918290030190a35060015b92915050565b600160a060020a038083166000908152600160209081526040808320938516835292905220545b92915050565b60008282018381101561069d57fe5b8091505b5092915050565b6000828211156106b457fe5b508082035b929150505600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a7230582067df00833f10f3cd5bb1c103cf4266bd3cf02036b011be8f22ebd16154b9fa820029",
|
||||
"networks": {
|
||||
"42": {
|
||||
"links": {},
|
||||
@@ -330,10 +334,10 @@
|
||||
"type": "event"
|
||||
}
|
||||
},
|
||||
"updated_at": 1498588231356,
|
||||
"updated_at": 1499462280317,
|
||||
"address": "0x48bacb9266a570d521063ef5dd96e61686dbe788"
|
||||
}
|
||||
},
|
||||
"schema_version": "0.0.5",
|
||||
"updated_at": 1498588231356
|
||||
"updated_at": 1499462280317
|
||||
}
|
||||
@@ -182,8 +182,8 @@
|
||||
"type": "event"
|
||||
}
|
||||
],
|
||||
"unlinked_binary": "0x6060604052341561000c57fe5b5b6104f78061001c6000396000f300606060405236156100675763ffffffff60e060020a600035041663095ea7b3811461006957806318160ddd1461009c57806323b872dd146100be57806370a08231146100f7578063a0712d6814610125578063a9059cbb1461013a578063dd62ed3e1461016d575bfe5b341561007157fe5b610088600160a060020a03600435166024356101a1565b604080519115158252519081900360200190f35b34156100a457fe5b6100ac61020c565b60408051918252519081900360200190f35b34156100c657fe5b610088600160a060020a0360043581169060243516604435610212565b604080519115158252519081900360200190f35b34156100ff57fe5b6100ac600160a060020a036004351661030d565b60408051918252519081900360200190f35b341561012d57fe5b61013860043561032c565b005b341561014257fe5b610088600160a060020a0360043516602435610394565b604080519115158252519081900360200190f35b341561017557fe5b6100ac600160a060020a0360043581169060243516610445565b60408051918252519081900360200190f35b600160a060020a03338116600081815260016020908152604080832094871680845294825280832086905580518681529051929493927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b60025481565b600160a060020a0383166000908152602081905260408120548290108015906102625750600160a060020a0380851660009081526001602090815260408083203390941683529290522054829010155b80156102875750600160a060020a038316600090815260208190526040902054828101115b1561030157600160a060020a0380841660008181526020818152604080832080548801905588851680845281842080548990039055600183528184203390961684529482529182902080548790039055815186815291519293926000805160206104ac8339815191529281900390910190a3506001610305565b5060005b5b9392505050565b600160a060020a0381166000908152602081905260409020545b919050565b68056bc75e2d631000008111156103435760006000fd5b600160a060020a033316600090815260208190526040902054610367908290610472565b600160a060020a03331660009081526020819052604090205560025461038d9082610472565b6002555b50565b600160a060020a0333166000908152602081905260408120548290108015906103d65750600160a060020a038316600090815260208190526040902054828101115b1561043657600160a060020a0333811660008181526020818152604080832080548890039055938716808352918490208054870190558351868152935191936000805160206104ac833981519152929081900390910190a3506001610206565b506000610206565b5b92915050565b600160a060020a038083166000908152600160209081526040808320938516835292905220545b92915050565b600082820161048f84821080159061048a5750838210155b61049a565b8091505b5092915050565b8015156103915760006000fd5b5b505600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a7230582017b556a0dd152ca0b949c108d1e5479ccafa38c1a952572dde1d45dab72f113b0029",
|
||||
"unlinked_binary": "0x6060604052341561000c57fe5b5b6104da8061001c6000396000f300606060405236156100675763ffffffff60e060020a600035041663095ea7b3811461006957806318160ddd1461009c57806323b872dd146100be57806370a08231146100f7578063a0712d6814610125578063a9059cbb1461013a578063dd62ed3e1461016d575bfe5b341561007157fe5b610088600160a060020a03600435166024356101a1565b604080519115158252519081900360200190f35b34156100a457fe5b6100ac61020c565b60408051918252519081900360200190f35b34156100c657fe5b610088600160a060020a0360043581169060243516604435610212565b604080519115158252519081900360200190f35b34156100ff57fe5b6100ac600160a060020a036004351661030e565b60408051918252519081900360200190f35b341561012d57fe5b61013860043561032d565b005b341561014257fe5b610088600160a060020a0360043516602435610395565b604080519115158252519081900360200190f35b341561017557fe5b6100ac600160a060020a0360043581169060243516610447565b60408051918252519081900360200190f35b600160a060020a03338116600081815260016020908152604080832094871680845294825280832086905580518681529051929493927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b60025481565b600160a060020a0383166000908152602081905260408120548290108015906102625750600160a060020a0380851660009081526001602090815260408083203390941683529290522054829010155b80156102885750600160a060020a03831660009081526020819052604090205482810110155b1561030257600160a060020a03808416600081815260208181526040808320805488019055888516808452818420805489900390556001835281842033909616845294825291829020805487900390558151868152915192939260008051602061048f8339815191529281900390910190a3506001610306565b5060005b5b9392505050565b600160a060020a0381166000908152602081905260409020545b919050565b68056bc75e2d631000008111156103445760006000fd5b600160a060020a033316600090815260208190526040902054610368908290610474565b600160a060020a03331660009081526020819052604090205560025461038e9082610474565b6002555b50565b600160a060020a0333166000908152602081905260408120548290108015906103d85750600160a060020a03831660009081526020819052604090205482810110155b1561043857600160a060020a03338116600081815260208181526040808320805488900390559387168083529184902080548701905583518681529351919360008051602061048f833981519152929081900390910190a3506001610206565b506000610206565b5b92915050565b600160a060020a038083166000908152600160209081526040808320938516835292905220545b92915050565b60008282018381101561048357fe5b8091505b50929150505600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a72305820b42ca96e1b6db90faf9be8fb630f57ee3986233fec8ecfc11fd467b13499abc70029",
|
||||
"networks": {},
|
||||
"schema_version": "0.0.5",
|
||||
"updated_at": 1498588228068
|
||||
"updated_at": 1499462278466
|
||||
}
|
||||
@@ -177,7 +177,7 @@
|
||||
"type": "event"
|
||||
}
|
||||
],
|
||||
"unlinked_binary": "0x60606040525b60008054600160a060020a03191633600160a060020a03161790555b5b610727806100316000396000f300606060405236156100725763ffffffff60e060020a60003504166315dacbea811461007457806342f1181e146100b3578063494503d4146100e357806370712939146101125780638da5cb5b14610142578063b91816111461016e578063d39de6e91461019e578063f2fde38b14610209575bfe5b341561007c57fe5b61009f600160a060020a0360043581169060243581169060443516606435610227565b604080519115158252519081900360200190f35b34156100bb57fe5b61009f600160a060020a03600435166102e0565b604080519115158252519081900360200190f35b34156100eb57fe5b6100f66004356103c9565b60408051600160a060020a039092168252519081900360200190f35b341561011a57fe5b61009f600160a060020a03600435166103fb565b604080519115158252519081900360200190f35b341561014a57fe5b6100f661059b565b60408051600160a060020a039092168252519081900360200190f35b341561017657fe5b61009f600160a060020a03600435166105aa565b604080519115158252519081900360200190f35b34156101a657fe5b6101ae6105bf565b60408051602080825283518183015283519192839290830191858101910280838382156101f6575b8051825260208311156101f657601f1990920191602091820191016101d6565b5050509050019250505060405180910390f35b341561021157fe5b610225600160a060020a0360043516610628565b005b600160a060020a03331660009081526001602052604081205460ff16151561024f5760006000fd5b6040805160006020918201819052825160e060020a6323b872dd028152600160a060020a0388811660048301528781166024830152604482018790529351938916936323b872dd9360648084019491938390030190829087803b15156102b157fe5b6102c65a03f115156102bf57fe5b505060405151151590506102d35760006000fd5b5060015b5b949350505050565b6000805433600160a060020a039081169116146102fd5760006000fd5b600160a060020a038216600090815260016020526040902054829060ff16156103265760006000fd5b600160a060020a0383166000908152600160208190526040909120805460ff191682179055600280549091810161035d8382610674565b916000526020600020900160005b81546101009190910a600160a060020a0381810219909216878316918202179092556040513390911692507f94bb87f4c15c4587ff559a7584006fa01ddf9299359be6b512b94527aa961aca90600090a3600191505b5b505b919050565b60028054829081106103d757fe5b906000526020600020900160005b915054906101000a9004600160a060020a031681565b60008054819033600160a060020a0390811691161461041a5760006000fd5b600160a060020a038316600090815260016020526040902054839060ff1615156104445760006000fd5b600160a060020a0384166000908152600160205260408120805460ff1916905591505b6002548210156105545783600160a060020a031660028381548110151561048a57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a03161415610548576002805460001981019081106104cb57fe5b906000526020600020900160005b9054906101000a9004600160a060020a03166002838154811015156104fa57fe5b906000526020600020900160005b6101000a815481600160a060020a030219169083600160a060020a0316021790555060016002818180549050039150816105429190610674565b50610554565b5b600190910190610467565b604051600160a060020a0333811691908616907ff5b347a1e40749dd050f5f07fbdbeb7e3efa9756903044dd29401fd1d4bb4a1c90600090a3600192505b5b505b50919050565b600054600160a060020a031681565b60016020526000908152604090205460ff1681565b6105c76106c8565b600280548060200260200160405190810160405280929190818152602001828054801561061d57602002820191906000526020600020905b8154600160a060020a031681526001909101906020018083116105ff575b505050505090505b90565b60005433600160a060020a039081169116146106445760006000fd5b600160a060020a0381161561066f5760008054600160a060020a031916600160a060020a0383161790555b5b5b50565b815481835581811511610698576000838152602090206106989181019083016106da565b5b505050565b815481835581811511610698576000838152602090206106989181019083016106da565b5b505050565b60408051602081019091526000815290565b61062591905b808211156106f457600081556001016106e0565b5090565b905600a165627a7a7230582021aadf834398ddc9f252eb0b3ab6ddea131aa7bca5d904d429a49ab48bcbe2910029",
|
||||
"unlinked_binary": "0x60606040525b60008054600160a060020a03191633600160a060020a03161790555b5b610719806100316000396000f300606060405236156100725763ffffffff60e060020a60003504166315dacbea811461007457806342f1181e146100b3578063494503d4146100e357806370712939146101125780638da5cb5b14610142578063b91816111461016e578063d39de6e91461019e578063f2fde38b14610209575bfe5b341561007c57fe5b61009f600160a060020a0360043581169060243581169060443516606435610227565b604080519115158252519081900360200190f35b34156100bb57fe5b61009f600160a060020a03600435166102d2565b604080519115158252519081900360200190f35b34156100eb57fe5b6100f66004356103bb565b60408051600160a060020a039092168252519081900360200190f35b341561011a57fe5b61009f600160a060020a03600435166103ed565b604080519115158252519081900360200190f35b341561014a57fe5b6100f661058d565b60408051600160a060020a039092168252519081900360200190f35b341561017657fe5b61009f600160a060020a036004351661059c565b604080519115158252519081900360200190f35b34156101a657fe5b6101ae6105b1565b60408051602080825283518183015283519192839290830191858101910280838382156101f6575b8051825260208311156101f657601f1990920191602091820191016101d6565b5050509050019250505060405180910390f35b341561021157fe5b610225600160a060020a036004351661061a565b005b600160a060020a03331660009081526001602052604081205460ff16151561024f5760006000fd5b6040805160006020918201819052825160e060020a6323b872dd028152600160a060020a0388811660048301528781166024830152604482018790529351938916936323b872dd9360648084019491938390030190829087803b15156102b157fe5b6102c65a03f115156102bf57fe5b5050604051519150505b5b949350505050565b6000805433600160a060020a039081169116146102ef5760006000fd5b600160a060020a038216600090815260016020526040902054829060ff16156103185760006000fd5b600160a060020a0383166000908152600160208190526040909120805460ff191682179055600280549091810161034f8382610666565b916000526020600020900160005b81546101009190910a600160a060020a0381810219909216878316918202179092556040513390911692507f94bb87f4c15c4587ff559a7584006fa01ddf9299359be6b512b94527aa961aca90600090a3600191505b5b505b919050565b60028054829081106103c957fe5b906000526020600020900160005b915054906101000a9004600160a060020a031681565b60008054819033600160a060020a0390811691161461040c5760006000fd5b600160a060020a038316600090815260016020526040902054839060ff1615156104365760006000fd5b600160a060020a0384166000908152600160205260408120805460ff1916905591505b6002548210156105465783600160a060020a031660028381548110151561047c57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a0316141561053a576002805460001981019081106104bd57fe5b906000526020600020900160005b9054906101000a9004600160a060020a03166002838154811015156104ec57fe5b906000526020600020900160005b6101000a815481600160a060020a030219169083600160a060020a0316021790555060016002818180549050039150816105349190610666565b50610546565b5b600190910190610459565b604051600160a060020a0333811691908616907ff5b347a1e40749dd050f5f07fbdbeb7e3efa9756903044dd29401fd1d4bb4a1c90600090a3600192505b5b505b50919050565b600054600160a060020a031681565b60016020526000908152604090205460ff1681565b6105b96106ba565b600280548060200260200160405190810160405280929190818152602001828054801561060f57602002820191906000526020600020905b8154600160a060020a031681526001909101906020018083116105f1575b505050505090505b90565b60005433600160a060020a039081169116146106365760006000fd5b600160a060020a038116156106615760008054600160a060020a031916600160a060020a0383161790555b5b5b50565b81548183558181151161068a5760008381526020902061068a9181019083016106cc565b5b505050565b81548183558181151161068a5760008381526020902061068a9181019083016106cc565b5b505050565b60408051602081019091526000815290565b61061791905b808211156106e657600081556001016106d2565b5090565b905600a165627a7a723058203818c069c958ca0b51c3a7e444c33e0384d08b329fdda95d546bc2814f9d45580029",
|
||||
"networks": {
|
||||
"42": {
|
||||
"links": {},
|
||||
@@ -258,10 +258,10 @@
|
||||
"type": "event"
|
||||
}
|
||||
},
|
||||
"updated_at": 1498588231340,
|
||||
"updated_at": 1499462280313,
|
||||
"address": "0x871dd7c2b4b25e1aa18728e9d5f2af4c4e431f5c"
|
||||
}
|
||||
},
|
||||
"schema_version": "0.0.5",
|
||||
"updated_at": 1498588231340
|
||||
"updated_at": 1499462280313
|
||||
}
|
||||
@@ -169,8 +169,8 @@
|
||||
"type": "event"
|
||||
}
|
||||
],
|
||||
"unlinked_binary": "0x6060604052341561000c57fe5b5b6101e08061001c6000396000f3006060604052361561005c5763ffffffff60e060020a600035041663095ea7b3811461005e57806318160ddd1461009157806323b872dd146100b357806370a08231146100ec578063a9059cbb1461005e578063dd62ed3e1461014d575bfe5b341561006657fe5b61007d600160a060020a0360043516602435610181565b604080519115158252519081900360200190f35b341561009957fe5b6100a161018a565b60408051918252519081900360200190f35b34156100bb57fe5b61007d600160a060020a0360043581169060243516604435610190565b604080519115158252519081900360200190f35b34156100f457fe5b6100a1600160a060020a036004351661019a565b60408051918252519081900360200190f35b341561006657fe5b61007d600160a060020a0360043516602435610181565b604080519115158252519081900360200190f35b341561015557fe5b6100a1600160a060020a0360043581169060243516610181565b60408051918252519081900360200190f35b60005b92915050565b60005b90565b60005b9392505050565b60005b919050565b60005b92915050565b60005b929150505600a165627a7a723058203c197cc1ab179269cf5d1ae1606a41063b723c0e550a2805382c9c4600ddc75e0029",
|
||||
"unlinked_binary": "0x6060604052341561000c57fe5b5b6101e08061001c6000396000f3006060604052361561005c5763ffffffff60e060020a600035041663095ea7b3811461005e57806318160ddd1461009157806323b872dd146100b357806370a08231146100ec578063a9059cbb1461005e578063dd62ed3e1461014d575bfe5b341561006657fe5b61007d600160a060020a0360043516602435610181565b604080519115158252519081900360200190f35b341561009957fe5b6100a161018a565b60408051918252519081900360200190f35b34156100bb57fe5b61007d600160a060020a0360043581169060243516604435610190565b604080519115158252519081900360200190f35b34156100f457fe5b6100a1600160a060020a036004351661019a565b60408051918252519081900360200190f35b341561006657fe5b61007d600160a060020a0360043516602435610181565b604080519115158252519081900360200190f35b341561015557fe5b6100a1600160a060020a0360043581169060243516610181565b60408051918252519081900360200190f35b60005b92915050565b60005b90565b60005b9392505050565b60005b919050565b60005b92915050565b60005b929150505600a165627a7a72305820fdbf6d7c43240d51b292524e87c255de3b211ebfa0c7d4b726d8dc0da2a05e180029",
|
||||
"networks": {},
|
||||
"schema_version": "0.0.5",
|
||||
"updated_at": 1498588228068
|
||||
"updated_at": 1499462278465
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -105,10 +105,10 @@ export class ExchangeWrapper extends ContractWrapper {
|
||||
assert.doesConformToSchema('orderHash', orderHash, orderHashSchema);
|
||||
|
||||
const exchangeContract = await this._getExchangeContractAsync(exchangeContractAddress);
|
||||
let unavailableAmountInBaseUnits = await exchangeContract.getUnavailableValueT.call(orderHash);
|
||||
let unavailableTakerTokenAmount = await exchangeContract.getUnavailableTakerTokenAmount.call(orderHash);
|
||||
// Wrap BigNumbers returned from web3 with our own (later) version of BigNumber
|
||||
unavailableAmountInBaseUnits = new BigNumber(unavailableAmountInBaseUnits);
|
||||
return unavailableAmountInBaseUnits;
|
||||
unavailableTakerTokenAmount = new BigNumber(unavailableTakerTokenAmount);
|
||||
return unavailableTakerTokenAmount;
|
||||
}
|
||||
/**
|
||||
* Retrieve the takerAmount of an order that has already been filled.
|
||||
@@ -150,32 +150,35 @@ export class ExchangeWrapper extends ContractWrapper {
|
||||
* we allow you to specify `shouldCheckTransfer`. If true, the smart contract will not throw if the parties
|
||||
* do not have sufficient balances/allowances, preserving gas costs. Setting it to false forgoes this check
|
||||
* and causes the smart contract to throw (using all the gas supplied) instead.
|
||||
* @param signedOrder An object that conforms to the SignedOrder interface.
|
||||
* @param takerTokenFillAmount The amount of the order (in taker tokens baseUnits) that you wish to fill.
|
||||
* @param shouldCheckTransfer Whether or not you wish for the contract call to throw if upon
|
||||
* execution the tokens cannot be transferred.
|
||||
* @param takerAddress The user Ethereum address who would like to fill this order.
|
||||
* Must be available via the supplied Web3.Provider passed to 0x.js.
|
||||
* @return The amount of the order that was filled (in taker token baseUnits).
|
||||
* @param signedOrder An object that conforms to the SignedOrder interface.
|
||||
* @param fillTakerTokenAmount The amount of the order (in taker tokens baseUnits) that
|
||||
* you wish to fill.
|
||||
* @param shouldThrowOnInsufficientBalanceOrAllowance Whether or not you wish for the contract call to throw
|
||||
* if upon execution the tokens cannot be transferred.
|
||||
* @param takerAddress The user Ethereum address who would like to fill this order.
|
||||
* Must be available via the supplied Web3.Provider
|
||||
* passed to 0x.js.
|
||||
* @return The amount of the order that was filled (in taker token baseUnits).
|
||||
*/
|
||||
@decorators.contractCallErrorHandler
|
||||
public async fillOrderAsync(signedOrder: SignedOrder, takerTokenFillAmount: BigNumber.BigNumber,
|
||||
shouldCheckTransfer: boolean, takerAddress: string): Promise<BigNumber.BigNumber> {
|
||||
public async fillOrderAsync(signedOrder: SignedOrder, fillTakerTokenAmount: BigNumber.BigNumber,
|
||||
shouldThrowOnInsufficientBalanceOrAllowance: boolean,
|
||||
takerAddress: string): Promise<BigNumber.BigNumber> {
|
||||
assert.doesConformToSchema('signedOrder', signedOrder, signedOrderSchema);
|
||||
assert.isBigNumber('takerTokenFillAmount', takerTokenFillAmount);
|
||||
assert.isBoolean('shouldCheckTransfer', shouldCheckTransfer);
|
||||
assert.isBigNumber('fillTakerTokenAmount', fillTakerTokenAmount);
|
||||
assert.isBoolean('shouldThrowOnInsufficientBalanceOrAllowance', shouldThrowOnInsufficientBalanceOrAllowance);
|
||||
await assert.isSenderAddressAsync('takerAddress', takerAddress, this._web3Wrapper);
|
||||
|
||||
const exchangeInstance = await this._getExchangeContractAsync(signedOrder.exchangeContractAddress);
|
||||
await this._validateFillOrderAndThrowIfInvalidAsync(signedOrder, takerTokenFillAmount, takerAddress);
|
||||
await this._validateFillOrderAndThrowIfInvalidAsync(signedOrder, fillTakerTokenAmount, takerAddress);
|
||||
|
||||
const [orderAddresses, orderValues] = ExchangeWrapper._getOrderAddressesAndValues(signedOrder);
|
||||
|
||||
const gas = await exchangeInstance.fill.estimateGas(
|
||||
const gas = await exchangeInstance.fillOrder.estimateGas(
|
||||
orderAddresses,
|
||||
orderValues,
|
||||
takerTokenFillAmount,
|
||||
shouldCheckTransfer,
|
||||
fillTakerTokenAmount,
|
||||
shouldThrowOnInsufficientBalanceOrAllowance,
|
||||
signedOrder.ecSignature.v,
|
||||
signedOrder.ecSignature.r,
|
||||
signedOrder.ecSignature.s,
|
||||
@@ -183,11 +186,11 @@ export class ExchangeWrapper extends ContractWrapper {
|
||||
from: takerAddress,
|
||||
},
|
||||
);
|
||||
const response: ContractResponse = await exchangeInstance.fill(
|
||||
const response: ContractResponse = await exchangeInstance.fillOrder(
|
||||
orderAddresses,
|
||||
orderValues,
|
||||
takerTokenFillAmount,
|
||||
shouldCheckTransfer,
|
||||
fillTakerTokenAmount,
|
||||
shouldThrowOnInsufficientBalanceOrAllowance,
|
||||
signedOrder.ecSignature.v,
|
||||
signedOrder.ecSignature.r,
|
||||
signedOrder.ecSignature.s,
|
||||
@@ -198,27 +201,29 @@ export class ExchangeWrapper extends ContractWrapper {
|
||||
);
|
||||
this._throwErrorLogsAsErrors(response.logs);
|
||||
const logFillArgs = response.logs[0].args as LogFillContractEventArgs;
|
||||
const filledAmount = new BigNumber(logFillArgs.filledValueT);
|
||||
return filledAmount;
|
||||
const filledTakerTokenAmount = new BigNumber(logFillArgs.filledTakerTokenAmount);
|
||||
return filledTakerTokenAmount;
|
||||
}
|
||||
/**
|
||||
* Sequentially and atomically fills signedOrders up to the specified takerTokenFillAmount.
|
||||
* If the fill amount is reached - it succeeds and does not fill the rest of the orders.
|
||||
* If fill amount is not reached - it fills as much of the fill amount as possible and succeeds.
|
||||
* @param signedOrders The array of signedOrders that you would like to fill until
|
||||
* takerTokenFillAmount is reached.
|
||||
* @param takerTokenFillAmount The total amount of the takerTokens you would like to fill.
|
||||
* @param shouldCheckTransfer Whether or not you wish for the contract call to throw if upon
|
||||
* execution any of the tokens cannot be transferred. If set to false,
|
||||
* the call will continue to fill subsequent signedOrders even when
|
||||
* some cannot be filled.
|
||||
* @param takerAddress The user Ethereum address who would like to fill these orders.
|
||||
* Must be available via the supplied Web3.Provider passed to 0x.js.
|
||||
* @return The amount of the orders that was filled (in taker token baseUnits).
|
||||
* @param signedOrders The array of signedOrders that you would like to fill until
|
||||
* takerTokenFillAmount is reached.
|
||||
* @param fillTakerTokenAmount The total amount of the takerTokens you would like to fill.
|
||||
* @param shouldThrowOnInsufficientBalanceOrAllowance Whether or not you wish for the contract call to throw if
|
||||
* upon execution any of the tokens cannot be transferred.
|
||||
* If set to false, the call will continue to fill subsequent
|
||||
* signedOrders even when some cannot be filled.
|
||||
* @param takerAddress The user Ethereum address who would like to fill these
|
||||
* orders. Must be available via the supplied Web3.Provider
|
||||
* passed to 0x.js.
|
||||
* @return The amount of the orders that was filled (in taker token baseUnits).
|
||||
*/
|
||||
@decorators.contractCallErrorHandler
|
||||
public async fillOrdersUpToAsync(signedOrders: SignedOrder[], takerTokenFillAmount: BigNumber.BigNumber,
|
||||
shouldCheckTransfer: boolean, takerAddress: string): Promise<BigNumber.BigNumber> {
|
||||
public async fillOrdersUpToAsync(signedOrders: SignedOrder[], fillTakerTokenAmount: BigNumber.BigNumber,
|
||||
shouldThrowOnInsufficientBalanceOrAllowance: boolean,
|
||||
takerAddress: string): Promise<BigNumber.BigNumber> {
|
||||
assert.doesConformToSchema('signedOrders', signedOrders, signedOrdersSchema);
|
||||
const takerTokenAddresses = _.map(signedOrders, signedOrder => signedOrder.takerTokenAddress);
|
||||
assert.hasAtMostOneUniqueValue(takerTokenAddresses,
|
||||
@@ -226,12 +231,12 @@ export class ExchangeWrapper extends ContractWrapper {
|
||||
const exchangeContractAddresses = _.map(signedOrders, signedOrder => signedOrder.exchangeContractAddress);
|
||||
assert.hasAtMostOneUniqueValue(exchangeContractAddresses,
|
||||
ExchangeContractErrs.BATCH_ORDERS_MUST_HAVE_SAME_EXCHANGE_ADDRESS);
|
||||
assert.isBigNumber('takerTokenFillAmount', takerTokenFillAmount);
|
||||
assert.isBoolean('shouldCheckTransfer', shouldCheckTransfer);
|
||||
assert.isBigNumber('fillTakerTokenAmount', fillTakerTokenAmount);
|
||||
assert.isBoolean('shouldThrowOnInsufficientBalanceOrAllowance', shouldThrowOnInsufficientBalanceOrAllowance);
|
||||
await assert.isSenderAddressAsync('takerAddress', takerAddress, this._web3Wrapper);
|
||||
for (const signedOrder of signedOrders) {
|
||||
await this._validateFillOrderAndThrowIfInvalidAsync(
|
||||
signedOrder, takerTokenFillAmount, takerAddress);
|
||||
signedOrder, fillTakerTokenAmount, takerAddress);
|
||||
}
|
||||
if (_.isEmpty(signedOrders)) {
|
||||
return new BigNumber(0); // no-op
|
||||
@@ -251,11 +256,11 @@ export class ExchangeWrapper extends ContractWrapper {
|
||||
);
|
||||
|
||||
const exchangeInstance = await this._getExchangeContractAsync(exchangeContractAddresses[0]);
|
||||
const gas = await exchangeInstance.fillUpTo.estimateGas(
|
||||
const gas = await exchangeInstance.fillOrdersUpTo.estimateGas(
|
||||
orderAddressesArray,
|
||||
orderValuesArray,
|
||||
takerTokenFillAmount,
|
||||
shouldCheckTransfer,
|
||||
fillTakerTokenAmount,
|
||||
shouldThrowOnInsufficientBalanceOrAllowance,
|
||||
vArray,
|
||||
rArray,
|
||||
sArray,
|
||||
@@ -263,11 +268,11 @@ export class ExchangeWrapper extends ContractWrapper {
|
||||
from: takerAddress,
|
||||
},
|
||||
);
|
||||
const response: ContractResponse = await exchangeInstance.fillUpTo(
|
||||
const response: ContractResponse = await exchangeInstance.fillOrdersUpTo(
|
||||
orderAddressesArray,
|
||||
orderValuesArray,
|
||||
takerTokenFillAmount,
|
||||
shouldCheckTransfer,
|
||||
fillTakerTokenAmount,
|
||||
shouldThrowOnInsufficientBalanceOrAllowance,
|
||||
vArray,
|
||||
rArray,
|
||||
sArray,
|
||||
@@ -278,8 +283,9 @@ export class ExchangeWrapper extends ContractWrapper {
|
||||
);
|
||||
this._throwErrorLogsAsErrors(response.logs);
|
||||
let filledTakerTokenAmount = new BigNumber(0);
|
||||
const filledAmounts = _.each(response.logs, log => {
|
||||
filledTakerTokenAmount = filledTakerTokenAmount.plus((log.args as LogFillContractEventArgs).filledValueT);
|
||||
_.each(response.logs, log => {
|
||||
filledTakerTokenAmount = filledTakerTokenAmount.plus(
|
||||
(log.args as LogFillContractEventArgs).filledTakerTokenAmount);
|
||||
});
|
||||
return filledTakerTokenAmount;
|
||||
}
|
||||
@@ -288,17 +294,21 @@ export class ExchangeWrapper extends ContractWrapper {
|
||||
* Executes multiple fills atomically in a single transaction.
|
||||
* If shouldCheckTransfer is set to true, it will continue filling subsequent orders even when earlier ones fail.
|
||||
* When shouldCheckTransfer is set to false, if any fill fails, the entire batch fails.
|
||||
* @param orderFillRequests An array of objects that conform to the OrderFillRequest interface.
|
||||
* @param shouldCheckTransfer Whether or not you wish for the contract call to throw if upon
|
||||
* execution any of the tokens cannot be transferred. If set to false,
|
||||
* the call will continue to fill subsequent signedOrders even when some
|
||||
* cannot be filled.
|
||||
* @param takerAddress The user Ethereum address who would like to fill these orders.
|
||||
* Must be available via the supplied Web3.Provider passed to 0x.js.
|
||||
* @param orderFillRequests An array of objects that conform to the
|
||||
* OrderFillRequest interface.
|
||||
* @param shouldThrowOnInsufficientBalanceOrAllowance Whether or not you wish for the contract call to throw
|
||||
* if upon execution any of the tokens cannot be
|
||||
* transferred. If set to false, the call will continue to
|
||||
* fill subsequent signedOrders even when some
|
||||
* cannot be filled.
|
||||
* @param takerAddress The user Ethereum address who would like to fill
|
||||
* these orders. Must be available via the supplied
|
||||
* Web3.Provider passed to 0x.js.
|
||||
*/
|
||||
@decorators.contractCallErrorHandler
|
||||
public async batchFillOrdersAsync(orderFillRequests: OrderFillRequest[],
|
||||
shouldCheckTransfer: boolean, takerAddress: string): Promise<void> {
|
||||
shouldThrowOnInsufficientBalanceOrAllowance: boolean,
|
||||
takerAddress: string): Promise<void> {
|
||||
assert.doesConformToSchema('orderFillRequests', orderFillRequests, orderFillRequestsSchema);
|
||||
const exchangeContractAddresses = _.map(
|
||||
orderFillRequests,
|
||||
@@ -306,7 +316,7 @@ export class ExchangeWrapper extends ContractWrapper {
|
||||
);
|
||||
assert.hasAtMostOneUniqueValue(exchangeContractAddresses,
|
||||
ExchangeContractErrs.BATCH_ORDERS_MUST_HAVE_SAME_EXCHANGE_ADDRESS);
|
||||
assert.isBoolean('shouldCheckTransfer', shouldCheckTransfer);
|
||||
assert.isBoolean('shouldThrowOnInsufficientBalanceOrAllowance', shouldThrowOnInsufficientBalanceOrAllowance);
|
||||
await assert.isSenderAddressAsync('takerAddress', takerAddress, this._web3Wrapper);
|
||||
for (const orderFillRequest of orderFillRequests) {
|
||||
await this._validateFillOrderAndThrowIfInvalidAsync(
|
||||
@@ -326,16 +336,16 @@ export class ExchangeWrapper extends ContractWrapper {
|
||||
];
|
||||
});
|
||||
// We use _.unzip<any> because _.unzip doesn't type check if values have different types :'(
|
||||
const [orderAddressesArray, orderValuesArray, takerTokenFillAmountArray, vArray, rArray, sArray] = _.unzip<any>(
|
||||
const [orderAddressesArray, orderValuesArray, fillTakerTokenAmounts, vArray, rArray, sArray] = _.unzip<any>(
|
||||
orderAddressesValuesAmountsAndSignatureArray,
|
||||
);
|
||||
|
||||
const exchangeInstance = await this._getExchangeContractAsync(exchangeContractAddresses[0]);
|
||||
const gas = await exchangeInstance.batchFill.estimateGas(
|
||||
const gas = await exchangeInstance.batchFillOrders.estimateGas(
|
||||
orderAddressesArray,
|
||||
orderValuesArray,
|
||||
takerTokenFillAmountArray,
|
||||
shouldCheckTransfer,
|
||||
fillTakerTokenAmounts,
|
||||
shouldThrowOnInsufficientBalanceOrAllowance,
|
||||
vArray,
|
||||
rArray,
|
||||
sArray,
|
||||
@@ -343,11 +353,11 @@ export class ExchangeWrapper extends ContractWrapper {
|
||||
from: takerAddress,
|
||||
},
|
||||
);
|
||||
const response: ContractResponse = await exchangeInstance.batchFill(
|
||||
const response: ContractResponse = await exchangeInstance.batchFillOrders(
|
||||
orderAddressesArray,
|
||||
orderValuesArray,
|
||||
takerTokenFillAmountArray,
|
||||
shouldCheckTransfer,
|
||||
fillTakerTokenAmounts,
|
||||
shouldThrowOnInsufficientBalanceOrAllowance,
|
||||
vArray,
|
||||
rArray,
|
||||
sArray,
|
||||
@@ -363,29 +373,29 @@ export class ExchangeWrapper extends ContractWrapper {
|
||||
* the fill order is abandoned.
|
||||
* @param signedOrder An object that conforms to the SignedOrder interface. The
|
||||
* signedOrder you wish to fill.
|
||||
* @param takerTokenFillAmount The total amount of the takerTokens you would like to fill.
|
||||
* @param fillTakerTokenAmount The total amount of the takerTokens you would like to fill.
|
||||
* @param takerAddress The user Ethereum address who would like to fill this order.
|
||||
* Must be available via the supplied Web3.Provider passed to 0x.js.
|
||||
*/
|
||||
@decorators.contractCallErrorHandler
|
||||
public async fillOrKillOrderAsync(signedOrder: SignedOrder, takerTokenFillAmount: BigNumber.BigNumber,
|
||||
public async fillOrKillOrderAsync(signedOrder: SignedOrder, fillTakerTokenAmount: BigNumber.BigNumber,
|
||||
takerAddress: string): Promise<void> {
|
||||
assert.doesConformToSchema('signedOrder', signedOrder, signedOrderSchema);
|
||||
assert.isBigNumber('takerTokenFillAmount', takerTokenFillAmount);
|
||||
assert.isBigNumber('fillTakerTokenAmount', fillTakerTokenAmount);
|
||||
await assert.isSenderAddressAsync('takerAddress', takerAddress, this._web3Wrapper);
|
||||
|
||||
const exchangeInstance = await this._getExchangeContractAsync(signedOrder.exchangeContractAddress);
|
||||
await this._validateFillOrderAndThrowIfInvalidAsync(signedOrder, takerTokenFillAmount, takerAddress);
|
||||
await this._validateFillOrderAndThrowIfInvalidAsync(signedOrder, fillTakerTokenAmount, takerAddress);
|
||||
|
||||
await this._validateFillOrKillOrderAndThrowIfInvalidAsync(signedOrder, exchangeInstance.address,
|
||||
takerTokenFillAmount);
|
||||
fillTakerTokenAmount);
|
||||
|
||||
const [orderAddresses, orderValues] = ExchangeWrapper._getOrderAddressesAndValues(signedOrder);
|
||||
|
||||
const gas = await exchangeInstance.fillOrKill.estimateGas(
|
||||
const gas = await exchangeInstance.fillOrKillOrder.estimateGas(
|
||||
orderAddresses,
|
||||
orderValues,
|
||||
takerTokenFillAmount,
|
||||
fillTakerTokenAmount,
|
||||
signedOrder.ecSignature.v,
|
||||
signedOrder.ecSignature.r,
|
||||
signedOrder.ecSignature.s,
|
||||
@@ -393,10 +403,10 @@ export class ExchangeWrapper extends ContractWrapper {
|
||||
from: takerAddress,
|
||||
},
|
||||
);
|
||||
const response: ContractResponse = await exchangeInstance.fillOrKill(
|
||||
const response: ContractResponse = await exchangeInstance.fillOrKillOrder(
|
||||
orderAddresses,
|
||||
orderValues,
|
||||
takerTokenFillAmount,
|
||||
fillTakerTokenAmount,
|
||||
signedOrder.ecSignature.v,
|
||||
signedOrder.ecSignature.r,
|
||||
signedOrder.ecSignature.s,
|
||||
@@ -445,13 +455,13 @@ export class ExchangeWrapper extends ContractWrapper {
|
||||
});
|
||||
|
||||
// We use _.unzip<any> because _.unzip doesn't type check if values have different types :'(
|
||||
const [orderAddresses, orderValues, fillTakerAmounts, vParams, rParams, sParams] =
|
||||
const [orderAddresses, orderValues, fillTakerTokenAmounts, vParams, rParams, sParams] =
|
||||
_.unzip<any>(orderAddressesValuesAndTakerTokenFillAmounts);
|
||||
|
||||
const gas = await exchangeInstance.batchFillOrKill.estimateGas(
|
||||
const gas = await exchangeInstance.batchFillOrKillOrders.estimateGas(
|
||||
orderAddresses,
|
||||
orderValues,
|
||||
fillTakerAmounts,
|
||||
fillTakerTokenAmounts,
|
||||
vParams,
|
||||
rParams,
|
||||
sParams,
|
||||
@@ -459,10 +469,10 @@ export class ExchangeWrapper extends ContractWrapper {
|
||||
from: takerAddress,
|
||||
},
|
||||
);
|
||||
const response: ContractResponse = await exchangeInstance.batchFillOrKill(
|
||||
const response: ContractResponse = await exchangeInstance.batchFillOrKillOrders(
|
||||
orderAddresses,
|
||||
orderValues,
|
||||
fillTakerAmounts,
|
||||
fillTakerTokenAmounts,
|
||||
vParams,
|
||||
rParams,
|
||||
sParams,
|
||||
@@ -477,32 +487,32 @@ export class ExchangeWrapper extends ContractWrapper {
|
||||
* Cancel a given fill amount of an order. Cancellations are cumulative.
|
||||
* @param order An object that conforms to the Order or SignedOrder interface.
|
||||
* The order you would like to cancel.
|
||||
* @param takerTokenCancelAmount The amount (specified in taker tokens) that you would like to cancel.
|
||||
* @param cancelTakerTokenAmount The amount (specified in taker tokens) that you would like to cancel.
|
||||
* @return The amount of the order that was cancelled (in taker token baseUnits).
|
||||
*/
|
||||
@decorators.contractCallErrorHandler
|
||||
public async cancelOrderAsync(
|
||||
order: Order|SignedOrder, takerTokenCancelAmount: BigNumber.BigNumber): Promise<BigNumber.BigNumber> {
|
||||
order: Order|SignedOrder, cancelTakerTokenAmount: BigNumber.BigNumber): Promise<BigNumber.BigNumber> {
|
||||
assert.doesConformToSchema('order', order, orderSchema);
|
||||
assert.isBigNumber('takerTokenCancelAmount', takerTokenCancelAmount);
|
||||
assert.isBigNumber('takerTokenCancelAmount', cancelTakerTokenAmount);
|
||||
await assert.isSenderAddressAsync('order.maker', order.maker, this._web3Wrapper);
|
||||
|
||||
const exchangeInstance = await this._getExchangeContractAsync(order.exchangeContractAddress);
|
||||
await this._validateCancelOrderAndThrowIfInvalidAsync(order, takerTokenCancelAmount);
|
||||
await this._validateCancelOrderAndThrowIfInvalidAsync(order, cancelTakerTokenAmount);
|
||||
|
||||
const [orderAddresses, orderValues] = ExchangeWrapper._getOrderAddressesAndValues(order);
|
||||
const gas = await exchangeInstance.cancel.estimateGas(
|
||||
const gas = await exchangeInstance.cancelOrder.estimateGas(
|
||||
orderAddresses,
|
||||
orderValues,
|
||||
takerTokenCancelAmount,
|
||||
cancelTakerTokenAmount,
|
||||
{
|
||||
from: order.maker,
|
||||
},
|
||||
);
|
||||
const response: ContractResponse = await exchangeInstance.cancel(
|
||||
const response: ContractResponse = await exchangeInstance.cancelOrder(
|
||||
orderAddresses,
|
||||
orderValues,
|
||||
takerTokenCancelAmount,
|
||||
cancelTakerTokenAmount,
|
||||
{
|
||||
from: order.maker,
|
||||
gas,
|
||||
@@ -510,8 +520,8 @@ export class ExchangeWrapper extends ContractWrapper {
|
||||
);
|
||||
this._throwErrorLogsAsErrors(response.logs);
|
||||
const logFillArgs = response.logs[0].args as LogCancelContractEventArgs;
|
||||
const cancelledAmount = new BigNumber(logFillArgs.cancelledValueT);
|
||||
return cancelledAmount;
|
||||
const cancelledTakerTokenAmount = new BigNumber(logFillArgs.cancelledTakerTokenAmount);
|
||||
return cancelledTakerTokenAmount;
|
||||
}
|
||||
/**
|
||||
* Batch version of cancelOrderAsync. Atomically cancels multiple orders in a single transaction.
|
||||
@@ -549,20 +559,20 @@ export class ExchangeWrapper extends ContractWrapper {
|
||||
];
|
||||
});
|
||||
// We use _.unzip<any> because _.unzip doesn't type check if values have different types :'(
|
||||
const [orderAddresses, orderValues, takerTokenCancelAmounts] =
|
||||
const [orderAddresses, orderValues, cancelTakerTokenAmounts] =
|
||||
_.unzip<any>(orderAddressesValuesAndTakerTokenCancelAmounts);
|
||||
const gas = await exchangeInstance.batchCancel.estimateGas(
|
||||
const gas = await exchangeInstance.batchCancelOrders.estimateGas(
|
||||
orderAddresses,
|
||||
orderValues,
|
||||
takerTokenCancelAmounts,
|
||||
cancelTakerTokenAmounts,
|
||||
{
|
||||
from: maker,
|
||||
},
|
||||
);
|
||||
const response: ContractResponse = await exchangeInstance.batchCancel(
|
||||
const response: ContractResponse = await exchangeInstance.batchCancelOrders(
|
||||
orderAddresses,
|
||||
orderValues,
|
||||
takerTokenCancelAmounts,
|
||||
cancelTakerTokenAmounts,
|
||||
{
|
||||
from: maker,
|
||||
gas,
|
||||
@@ -764,14 +774,14 @@ export class ExchangeWrapper extends ContractWrapper {
|
||||
throw new Error(errMessage);
|
||||
}
|
||||
}
|
||||
private async _isRoundingErrorAsync(takerTokenAmount: BigNumber.BigNumber,
|
||||
fillTakerAmount: BigNumber.BigNumber,
|
||||
private async _isRoundingErrorAsync(numerator: BigNumber.BigNumber,
|
||||
demoninator: BigNumber.BigNumber,
|
||||
makerTokenAmount: BigNumber.BigNumber,
|
||||
exchangeContractAddress: string): Promise<boolean> {
|
||||
await assert.isUserAddressAvailableAsync(this._web3Wrapper);
|
||||
const exchangeInstance = await this._getExchangeContractAsync(exchangeContractAddress);
|
||||
const isRoundingError = await exchangeInstance.isRoundingError.call(
|
||||
takerTokenAmount, fillTakerAmount, makerTokenAmount,
|
||||
demoninator, numerator, makerTokenAmount,
|
||||
);
|
||||
return isRoundingError;
|
||||
}
|
||||
@@ -800,7 +810,7 @@ export class ExchangeWrapper extends ContractWrapper {
|
||||
}
|
||||
private async _getZRXTokenAddressAsync(exchangeContractAddress: string): Promise<string> {
|
||||
const exchangeInstance = await this._getExchangeContractAsync(exchangeContractAddress);
|
||||
const ZRXtokenAddress = await exchangeInstance.ZRX.call();
|
||||
const ZRXtokenAddress = await exchangeInstance.ZRX_TOKEN_CONTRACT.call();
|
||||
return ZRXtokenAddress;
|
||||
}
|
||||
}
|
||||
|
||||
109
src/types.ts
109
src/types.ts
@@ -61,56 +61,69 @@ export interface ExchangeContract extends ContractInstance {
|
||||
LogFill: CreateContractEvent;
|
||||
LogCancel: CreateContractEvent;
|
||||
LogError: CreateContractEvent;
|
||||
ZRX: {
|
||||
ZRX_TOKEN_CONTRACT: {
|
||||
call: () => Promise<string>;
|
||||
};
|
||||
getUnavailableValueT: {
|
||||
getUnavailableTakerTokenAmount: {
|
||||
call: (orderHash: string) => BigNumber.BigNumber;
|
||||
};
|
||||
isRoundingError: {
|
||||
call: (takerTokenAmount: BigNumber.BigNumber, fillTakerAmount: BigNumber.BigNumber,
|
||||
makerTokenAmount: BigNumber.BigNumber, txOpts?: TxOpts) => Promise<boolean>;
|
||||
};
|
||||
fill: {
|
||||
(orderAddresses: OrderAddresses, orderValues: OrderValues, fillAmount: BigNumber.BigNumber,
|
||||
shouldCheckTransfer: boolean, v: number, r: string, s: string, txOpts?: TxOpts): ContractResponse;
|
||||
estimateGas: (orderAddresses: OrderAddresses, orderValues: OrderValues, fillAmount: BigNumber.BigNumber,
|
||||
shouldCheckTransfer: boolean, v: number, r: string, s: string, txOpts?: TxOpts) => number;
|
||||
};
|
||||
batchFill: {
|
||||
(orderAddresses: OrderAddresses[], orderValues: OrderValues[], fillAmounts: BigNumber.BigNumber[],
|
||||
shouldCheckTransfer: boolean, v: number[], r: string[], s: string[], txOpts?: TxOpts): ContractResponse;
|
||||
estimateGas: (orderAddresses: OrderAddresses[], orderValues: OrderValues[], fillAmounts: BigNumber.BigNumber[],
|
||||
shouldCheckTransfer: boolean, v: number[], r: string[], s: string[], txOpts?: TxOpts) => number;
|
||||
};
|
||||
fillUpTo: {
|
||||
(orderAddresses: OrderAddresses[], orderValues: OrderValues[], fillAmount: BigNumber.BigNumber,
|
||||
shouldCheckTransfer: boolean, v: number[], r: string[], s: string[], txOpts?: TxOpts): ContractResponse;
|
||||
estimateGas: (orderAddresses: OrderAddresses[], orderValues: OrderValues[], fillAmount: BigNumber.BigNumber,
|
||||
shouldCheckTransfer: boolean, v: number[], r: string[], s: string[], txOpts?: TxOpts) => number;
|
||||
};
|
||||
cancel: {
|
||||
(orderAddresses: OrderAddresses, orderValues: OrderValues, cancelAmount: BigNumber.BigNumber,
|
||||
txOpts?: TxOpts): ContractResponse;
|
||||
estimateGas: (orderAddresses: OrderAddresses, orderValues: OrderValues, cancelAmount: BigNumber.BigNumber,
|
||||
txOpts?: TxOpts) => number;
|
||||
};
|
||||
batchCancel: {
|
||||
(orderAddresses: OrderAddresses[], orderValues: OrderValues[], cancelAmount: BigNumber.BigNumber[],
|
||||
txOpts?: TxOpts): ContractResponse;
|
||||
estimateGas: (orderAddresses: OrderAddresses[], orderValues: OrderValues[], cancelAmount: BigNumber.BigNumber[],
|
||||
txOpts?: TxOpts) => number;
|
||||
};
|
||||
fillOrKill: {
|
||||
(orderAddresses: OrderAddresses, orderValues: OrderValues, fillAmount: BigNumber.BigNumber,
|
||||
fillOrder: {
|
||||
(orderAddresses: OrderAddresses, orderValues: OrderValues, fillTakerTokenAmount: BigNumber.BigNumber,
|
||||
shouldThrowOnInsufficientBalanceOrAllowance: boolean,
|
||||
v: number, r: string, s: string, txOpts?: TxOpts): ContractResponse;
|
||||
estimateGas: (orderAddresses: OrderAddresses, orderValues: OrderValues, fillAmount: BigNumber.BigNumber,
|
||||
estimateGas: (orderAddresses: OrderAddresses, orderValues: OrderValues,
|
||||
fillTakerTokenAmount: BigNumber.BigNumber,
|
||||
shouldThrowOnInsufficientBalanceOrAllowance: boolean,
|
||||
v: number, r: string, s: string, txOpts?: TxOpts) => number;
|
||||
};
|
||||
batchFillOrKill: {
|
||||
(orderAddresses: OrderAddresses[], orderValues: OrderValues[], fillValuesT: BigNumber.BigNumber[],
|
||||
batchFillOrders: {
|
||||
(orderAddresses: OrderAddresses[], orderValues: OrderValues[], fillTakerTokenAmounts: BigNumber.BigNumber[],
|
||||
shouldThrowOnInsufficientBalanceOrAllowance: boolean,
|
||||
v: number[], r: string[], s: string[], txOpts?: TxOpts): ContractResponse;
|
||||
estimateGas: (orderAddresses: OrderAddresses[], orderValues: OrderValues[],
|
||||
fillTakerTokenAmounts: BigNumber.BigNumber[],
|
||||
shouldThrowOnInsufficientBalanceOrAllowance: boolean,
|
||||
v: number[], r: string[], s: string[], txOpts?: TxOpts) => number;
|
||||
};
|
||||
fillOrdersUpTo: {
|
||||
(orderAddresses: OrderAddresses[], orderValues: OrderValues[], fillTakerTokenAmount: BigNumber.BigNumber,
|
||||
shouldThrowOnInsufficientBalanceOrAllowance: boolean,
|
||||
v: number[], r: string[], s: string[], txOpts?: TxOpts): ContractResponse;
|
||||
estimateGas: (orderAddresses: OrderAddresses[], orderValues: OrderValues[],
|
||||
fillTakerTokenAmount: BigNumber.BigNumber,
|
||||
shouldThrowOnInsufficientBalanceOrAllowance: boolean,
|
||||
v: number[], r: string[], s: string[], txOpts?: TxOpts) => number;
|
||||
};
|
||||
cancelOrder: {
|
||||
(orderAddresses: OrderAddresses, orderValues: OrderValues, canceltakerTokenAmount: BigNumber.BigNumber,
|
||||
txOpts?: TxOpts): ContractResponse;
|
||||
estimateGas: (orderAddresses: OrderAddresses, orderValues: OrderValues,
|
||||
canceltakerTokenAmount: BigNumber.BigNumber,
|
||||
txOpts?: TxOpts) => number;
|
||||
};
|
||||
batchCancelOrders: {
|
||||
(orderAddresses: OrderAddresses[], orderValues: OrderValues[], cancelTakerTokenAmounts: BigNumber.BigNumber[],
|
||||
txOpts?: TxOpts): ContractResponse;
|
||||
estimateGas: (orderAddresses: OrderAddresses[], orderValues: OrderValues[],
|
||||
cancelTakerTokenAmounts: BigNumber.BigNumber[],
|
||||
txOpts?: TxOpts) => number;
|
||||
};
|
||||
fillOrKillOrder: {
|
||||
(orderAddresses: OrderAddresses, orderValues: OrderValues, fillTakerTokenAmount: BigNumber.BigNumber,
|
||||
v: number, r: string, s: string, txOpts?: TxOpts): ContractResponse;
|
||||
estimateGas: (orderAddresses: OrderAddresses, orderValues: OrderValues,
|
||||
fillTakerTokenAmount: BigNumber.BigNumber,
|
||||
v: number, r: string, s: string, txOpts?: TxOpts) => number;
|
||||
};
|
||||
batchFillOrKillOrders: {
|
||||
(orderAddresses: OrderAddresses[], orderValues: OrderValues[], fillTakerTokenAmounts: BigNumber.BigNumber[],
|
||||
v: number[], r: string[], s: string[], txOpts: TxOpts): ContractResponse;
|
||||
estimateGas: (orderAddresses: OrderAddresses[], orderValues: OrderValues[], fillValuesT: BigNumber.BigNumber[],
|
||||
estimateGas: (orderAddresses: OrderAddresses[], orderValues: OrderValues[],
|
||||
fillTakerTokenAmounts: BigNumber.BigNumber[],
|
||||
v: number[], r: string[], s: string[], txOpts?: TxOpts) => number;
|
||||
};
|
||||
filled: {
|
||||
@@ -221,22 +234,22 @@ export interface LogFillContractEventArgs {
|
||||
maker: string;
|
||||
taker: string;
|
||||
feeRecipient: string;
|
||||
tokenM: string;
|
||||
tokenT: string;
|
||||
filledValueM: BigNumber.BigNumber;
|
||||
filledValueT: BigNumber.BigNumber;
|
||||
feeMPaid: BigNumber.BigNumber;
|
||||
feeTPaid: BigNumber.BigNumber;
|
||||
makerToken: string;
|
||||
takerToken: string;
|
||||
filledMakerTokenAmount: BigNumber.BigNumber;
|
||||
filledTakerTokenAmount: BigNumber.BigNumber;
|
||||
paidMakerFee: BigNumber.BigNumber;
|
||||
paidTakerFee: BigNumber.BigNumber;
|
||||
tokens: string;
|
||||
orderHash: string;
|
||||
}
|
||||
export interface LogCancelContractEventArgs {
|
||||
maker: string;
|
||||
feeRecipient: string;
|
||||
tokenM: string;
|
||||
tokenT: string;
|
||||
cancelledValueM: BigNumber.BigNumber;
|
||||
cancelledValueT: BigNumber.BigNumber;
|
||||
makerToken: string;
|
||||
takerToken: string;
|
||||
cancelledMakerTokenAmount: BigNumber.BigNumber;
|
||||
cancelledTakerTokenAmount: BigNumber.BigNumber;
|
||||
tokens: string;
|
||||
orderHash: string;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import * as _ from 'lodash';
|
||||
import * as Web3 from 'web3';
|
||||
import {EventCallback, ContractEventArg, ContractEvent, ContractEventObj, ContractEventEmitter} from '../types';
|
||||
import * as BigNumber from 'bignumber.js';
|
||||
import promisify = require('es6-promisify');
|
||||
@@ -29,10 +28,8 @@ export const eventUtils = {
|
||||
const wrapIfBigNumber = (value: ContractEventArg): ContractEventArg => {
|
||||
// HACK: The old version of BigNumber used by Web3@0.19.0 does not support the `isBigNumber`
|
||||
// and checking for a BigNumber instance using `instanceof` does not work either. We therefore
|
||||
// compare the constructor functions of the possible BigNumber instance and the BigNumber used by
|
||||
// Web3.
|
||||
const web3BigNumber = (Web3.prototype as any).BigNumber;
|
||||
const isWeb3BigNumber = web3BigNumber.toString() === value.constructor.toString();
|
||||
// check if the value constructor is a bignumber constructor.
|
||||
const isWeb3BigNumber = _.startsWith(value.constructor.toString(), 'function BigNumber(');
|
||||
return isWeb3BigNumber ? new BigNumber(value) : value;
|
||||
};
|
||||
event.args = _.mapValues(event.args, wrapIfBigNumber);
|
||||
|
||||
@@ -785,10 +785,10 @@ describe('ExchangeWrapper', () => {
|
||||
);
|
||||
zeroExEvent.watch((err: Error, event: ContractEvent) => {
|
||||
const args = event.args as LogFillContractEventArgs;
|
||||
expect(args.filledValueM.isBigNumber).to.be.true();
|
||||
expect(args.filledValueT.isBigNumber).to.be.true();
|
||||
expect(args.feeMPaid.isBigNumber).to.be.true();
|
||||
expect(args.feeTPaid.isBigNumber).to.be.true();
|
||||
expect(args.filledMakerTokenAmount.isBigNumber).to.be.true();
|
||||
expect(args.filledTakerTokenAmount.isBigNumber).to.be.true();
|
||||
expect(args.paidMakerFee.isBigNumber).to.be.true();
|
||||
expect(args.paidTakerFee.isBigNumber).to.be.true();
|
||||
done();
|
||||
});
|
||||
await zeroEx.exchange.fillOrderAsync(
|
||||
|
||||
Reference in New Issue
Block a user