From ceea66b32bd88f89d865ea18933d7d46208be62a Mon Sep 17 00:00:00 2001 From: JonathanAmenechi <7217608+JonathanAmenechi@users.noreply.github.com> Date: Tue, 24 May 2022 15:07:09 -0400 Subject: [PATCH] fix: update contracts, tests, abis --- ...tocol.json => PolyLimitOrderProtocol.json} | 342 +++--------------- py_order_utils/builders/base_builder.py | 2 +- .../builders/limit_order_builder.py | 2 - py_order_utils/config.py | 4 +- py_order_utils/constants.py | 2 - py_order_utils/facades/erc1155_facade.py | 2 +- py_order_utils/facades/limit_order_facade.py | 2 +- py_order_utils/model/model.py | 6 - setup.py | 2 +- tests/test_limit_order_builder.py | 38 +- tests/test_market_order_builder.py | 21 +- 11 files changed, 92 insertions(+), 331 deletions(-) rename py_order_utils/abi/{LimitOrderProtocol.json => PolyLimitOrderProtocol.json} (85%) diff --git a/py_order_utils/abi/LimitOrderProtocol.json b/py_order_utils/abi/PolyLimitOrderProtocol.json similarity index 85% rename from py_order_utils/abi/LimitOrderProtocol.json rename to py_order_utils/abi/PolyLimitOrderProtocol.json index 4079b58..57a267c 100644 --- a/py_order_utils/abi/LimitOrderProtocol.json +++ b/py_order_utils/abi/PolyLimitOrderProtocol.json @@ -161,45 +161,6 @@ "name": "SafeFactoryChanged", "type": "event" }, - { - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "LIMIT_ORDER_TYPEHASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MARKET_ORDER_TYPEHASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -283,16 +244,6 @@ "name": "predicate", "type": "bytes" }, - { - "internalType": "bytes", - "name": "permit", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "interaction", - "type": "bytes" - }, { "internalType": "address", "name": "signer", @@ -394,16 +345,6 @@ "name": "predicate", "type": "bytes" }, - { - "internalType": "bytes", - "name": "permit", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "interaction", - "type": "bytes" - }, { "internalType": "address", "name": "signer", @@ -469,16 +410,6 @@ "name": "predicate", "type": "bytes" }, - { - "internalType": "bytes", - "name": "permit", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "interaction", - "type": "bytes" - }, { "internalType": "address", "name": "signer", @@ -506,6 +437,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "domainSeparator", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -579,16 +523,6 @@ "name": "predicate", "type": "bytes" }, - { - "internalType": "bytes", - "name": "permit", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "interaction", - "type": "bytes" - }, { "internalType": "address", "name": "signer", @@ -685,16 +619,6 @@ "name": "predicate", "type": "bytes" }, - { - "internalType": "bytes", - "name": "permit", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "interaction", - "type": "bytes" - }, { "internalType": "address", "name": "signer", @@ -732,7 +656,7 @@ }, { "internalType": "address", - "name": "target", + "name": "to", "type": "address" } ], @@ -752,122 +676,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "salt", - "type": "uint256" - }, - { - "internalType": "address", - "name": "makerAsset", - "type": "address" - }, - { - "internalType": "address", - "name": "takerAsset", - "type": "address" - }, - { - "internalType": "bytes", - "name": "makerAssetData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "takerAssetData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "getMakerAmount", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "getTakerAmount", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "predicate", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "permit", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "interaction", - "type": "bytes" - }, - { - "internalType": "address", - "name": "signer", - "type": "address" - }, - { - "internalType": "uint256", - "name": "sigType", - "type": "uint256" - } - ], - "internalType": "struct Orders.LimitOrder", - "name": "order", - "type": "tuple" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "makingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "takingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "thresholdAmount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "bytes", - "name": "permit", - "type": "bytes" - } - ], - "name": "fillOrderToWithPermit", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { @@ -1088,61 +896,46 @@ }, { "internalType": "address", - "name": "makerAsset", + "name": "signer", "type": "address" }, { "internalType": "address", - "name": "takerAsset", + "name": "maker", "type": "address" }, { - "internalType": "bytes", - "name": "makerAssetData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "takerAssetData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "getMakerAmount", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "getTakerAmount", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "predicate", - "type": "bytes" + "internalType": "address", + "name": "makerAsset", + "type": "address" }, { - "internalType": "bytes", - "name": "permit", - "type": "bytes" + "internalType": "uint256", + "name": "makerAmount", + "type": "uint256" }, { - "internalType": "bytes", - "name": "interaction", - "type": "bytes" + "internalType": "uint256", + "name": "makerAssetID", + "type": "uint256" }, { "internalType": "address", - "name": "signer", + "name": "takerAsset", "type": "address" }, + { + "internalType": "uint256", + "name": "takerAssetID", + "type": "uint256" + }, { "internalType": "uint256", "name": "sigType", "type": "uint256" } ], - "internalType": "struct Orders.LimitOrder", + "internalType": "struct Orders.MarketOrder", "name": "order", "type": "tuple" } @@ -1169,38 +962,43 @@ }, { "internalType": "address", - "name": "signer", + "name": "makerAsset", "type": "address" }, { "internalType": "address", - "name": "maker", + "name": "takerAsset", "type": "address" }, { - "internalType": "address", - "name": "makerAsset", - "type": "address" + "internalType": "bytes", + "name": "makerAssetData", + "type": "bytes" }, { - "internalType": "uint256", - "name": "makerAmount", - "type": "uint256" + "internalType": "bytes", + "name": "takerAssetData", + "type": "bytes" }, { - "internalType": "uint256", - "name": "makerAssetID", - "type": "uint256" + "internalType": "bytes", + "name": "getMakerAmount", + "type": "bytes" }, { - "internalType": "address", - "name": "takerAsset", - "type": "address" + "internalType": "bytes", + "name": "getTakerAmount", + "type": "bytes" }, { - "internalType": "uint256", - "name": "takerAssetID", - "type": "uint256" + "internalType": "bytes", + "name": "predicate", + "type": "bytes" + }, + { + "internalType": "address", + "name": "signer", + "type": "address" }, { "internalType": "uint256", @@ -1208,7 +1006,7 @@ "type": "uint256" } ], - "internalType": "struct Orders.MarketOrder", + "internalType": "struct Orders.LimitOrder", "name": "order", "type": "tuple" } @@ -1469,24 +1267,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "targets", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "data", - "type": "bytes[]" - } - ], - "name": "simulateCalls", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { @@ -1563,16 +1343,6 @@ "name": "predicate", "type": "bytes" }, - { - "internalType": "bytes", - "name": "permit", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "interaction", - "type": "bytes" - }, { "internalType": "address", "name": "signer", @@ -1664,4 +1434,4 @@ "stateMutability": "view", "type": "function" } -] +] \ No newline at end of file diff --git a/py_order_utils/builders/base_builder.py b/py_order_utils/builders/base_builder.py index 491665b..0430202 100644 --- a/py_order_utils/builders/base_builder.py +++ b/py_order_utils/builders/base_builder.py @@ -14,7 +14,7 @@ def __init__(self, exchange_address: str, chain_id: int, signer: Signer): def _get_domain_separator(self, chain_id: int, verifying_contract: str)->EIP712Struct: return make_domain( - name="1inch Limit Order Protocol", + name="Polymarket Limit Order Protocol", version="1", chainId=str(chain_id), verifyingContract=verifying_contract, diff --git a/py_order_utils/builders/limit_order_builder.py b/py_order_utils/builders/limit_order_builder.py index d0feeb8..df209a4 100644 --- a/py_order_utils/builders/limit_order_builder.py +++ b/py_order_utils/builders/limit_order_builder.py @@ -79,8 +79,6 @@ def build_limit_order(self, data: LimitOrderData)-> LimitOrder: getMakerAmount=get_maker_amount, getTakerAmount=get_taker_amount, predicate=predicate, - permit=data.permit, - interaction=data.interaction, signer=signer, sigType=data.sig_type ) diff --git a/py_order_utils/config.py b/py_order_utils/config.py index 53e6cac..f8f20e3 100644 --- a/py_order_utils/config.py +++ b/py_order_utils/config.py @@ -27,8 +27,8 @@ def get_conditional(self): ), 80001: ContractConfig( - exchange="0xe8DaCEd3A06A59ADADF804771d10684A6E536ffd", - executor="0xA15b04F6eb916f2e368Aeb17740a52b0379B8B6D", + exchange="0x6D486b31b5c0f724828Aff07c88606b213B0D196", + executor="0x6b0ab7A1E65ea6AE9072f6c45B4261ACDfB30827", collateral="0x2E8DCfE708D44ae2e406a1c02DFE2Fa13012f961", conditional = "0x7D8610E9567d2a6C9FBf66a5A13E9Ba8bb120d43" ) diff --git a/py_order_utils/constants.py b/py_order_utils/constants.py index 7283432..3096513 100644 --- a/py_order_utils/constants.py +++ b/py_order_utils/constants.py @@ -1,6 +1,4 @@ -PROTOCOL_NAME = '1inch Limit Order Protocol' -PROTOCOL_VERSION = '1' ZX = '0x' ZERO_ADDRESS = '0x0000000000000000000000000000000000000000' diff --git a/py_order_utils/facades/erc1155_facade.py b/py_order_utils/facades/erc1155_facade.py index 5518f67..167d4d9 100644 --- a/py_order_utils/facades/erc1155_facade.py +++ b/py_order_utils/facades/erc1155_facade.py @@ -6,7 +6,7 @@ class Erc1155Facade(BaseFacade): """ Facade for ERC1155 transfers and balance """ - ABIS = {"erc1155": "abi/ERC1155ABI.json", "lop": "abi/LimitOrderProtocol.json"} + ABIS = {"erc1155": "abi/ERC1155ABI.json", "lop": "abi/PolyLimitOrderProtocol.json"} transferFrom = "func_733NCGU" balanceOf = "balanceOf" diff --git a/py_order_utils/facades/limit_order_facade.py b/py_order_utils/facades/limit_order_facade.py index b227edb..fe1018d 100644 --- a/py_order_utils/facades/limit_order_facade.py +++ b/py_order_utils/facades/limit_order_facade.py @@ -8,7 +8,7 @@ class LimitOrderProtocolFacade(BaseFacade): Limit Order protocol facade """ - ABIS = {"lop": "abi/LimitOrderProtocol.json"} + ABIS = {"lop": "abi/PolyLimitOrderProtocol.json"} def __init__(self): super().__init__(self.ABIS) diff --git a/py_order_utils/model/model.py b/py_order_utils/model/model.py index 0567ac5..efb963d 100644 --- a/py_order_utils/model/model.py +++ b/py_order_utils/model/model.py @@ -25,8 +25,6 @@ class LimitOrderData: signer: str = None sig_type: int = EOA predicate: str = ZX - permit: str = ZX - interaction: str = ZX class LimitOrder(EIP712Struct): @@ -41,8 +39,6 @@ class LimitOrder(EIP712Struct): getMakerAmount = Bytes() getTakerAmount = Bytes() predicate = Bytes() - permit = Bytes() - interaction = Bytes() signer= Address() sigType = Uint(256) @@ -56,8 +52,6 @@ def dict(self): "getMakerAmount": self["getMakerAmount"], "getTakerAmount": self["getTakerAmount"], "predicate": self["predicate"], - "permit": self["permit"], - "interaction": self["interaction"], "signer": self["signer"], "sigType": self["sigType"], } diff --git a/setup.py b/setup.py index 764f607..6d233a7 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ setuptools.setup( name="py_order_utils", - version="0.0.18", + version="0.0.19", author="Jonathan Amenechi", author_email="jonathanamenechi@gmail.com", description="Python utilities used to generate and sign limit and market orders on Polymarket's CLOB", diff --git a/tests/test_limit_order_builder.py b/tests/test_limit_order_builder.py index 50c80e1..9adc9fa 100644 --- a/tests/test_limit_order_builder.py +++ b/tests/test_limit_order_builder.py @@ -73,16 +73,6 @@ def test_build_limit_order(self): "0x961d5b1e000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc9000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc90000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002463592c2b0000000000000000000000000000000000000000000000000000000061f5119f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044cf6fc6e300000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", limit_order["predicate"] ) - - self.assertEqual( - "0x", - limit_order["permit"] - ) - - self.assertEqual( - "0x", - limit_order["interaction"] - ) self.assertEqual( "0x70997970C51812dc3A010C7d01b50e0d17dc79C8", @@ -96,29 +86,27 @@ def test_build_limit_order(self): def test_build_signature(self): signer = mock.MagicMock() - expected_signature = "0xf3639d0f921eb0e21ea779394808612a846b6a6ee39c7ed7d369a45bc0b9cdaf00022ec65fff31a2124306d27fc471768f04b1da0ac5e483946a4bf70788dade1b" + expected_signature = "0xba171a61c9c0bc4453d29d9ab9e3699fd0be7eef8ab6fba1b2c6555ced42f79d7bb5a07f975b1bfaf7bccf7b8e89e1877ba717090a4e9934136f6e6743a7146b1b" # Instead of using a private key, unit tests mock the expected signature response signer.sign.return_value = expected_signature - builder = LimitOrderBuilder("0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9", 31337, signer) + builder = LimitOrderBuilder("0x0165878A594ca255338adfa4d48449f69242Eb8F", 31337, signer) order = LimitOrder( - salt= 1441990488917, - makerAsset="0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512", - takerAsset="0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9", - makerAssetData="0x23b872dd000000000000000000000000e3d9bfa896af6988f80027bfd13440a42c5ed02b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f4240", - takerAssetData="0x23b872e10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3d9bfa896af6988f80027bfd13440a42c5ed02b000000000000000000000000000000000000000000000000000000000007a1200000000000000000000000005fbdb2315678afecb367f032d93f642f64180aa3000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000", - getMakerAmount='0xf4a215c300000000000000000000000000000000000000000000000000000000000f4240000000000000000000000000000000000000000000000000000000000007a120', - getTakerAmount='0x296637bf00000000000000000000000000000000000000000000000000000000000f4240000000000000000000000000000000000000000000000000000000000007a120', - predicate="0x", - permit="0x", - interaction="0x", - signer='0xe3d9BFA896aF6988f80027bfd13440A42C5ed02b', - sigType=0 + salt=1568294891220, + makerAsset='0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512', + takerAsset='0x0165878A594ca255338adfa4d48449f69242Eb8F', + makerAssetData='0x23b872dd00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f4240', + takerAssetData='0x23b872e1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8000000000000000000000000000000000000000000000000000000000007a1200000000000000000000000005fbdb2315678afecb367f032d93f642f64180aa3000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000', + getMakerAmount='0xf4a215c300000000000000000000000000000000000000000000000000000000000f4240000000000000000000000000000000000000000000000000000000000007a120', + getTakerAmount='0x296637bf00000000000000000000000000000000000000000000000000000000000f4240000000000000000000000000000000000000000000000000000000000007a120', + predicate='0x961d5b1e000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002463592c2b00000000000000000000000000000000000000000000000000000000628e1424000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044cf6fc6e300000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + signer='0x70997970C51812dc3A010C7d01b50e0d17dc79C8', + sigType=0 ) # Ensure struct hash is expected(generated via ethers) - expected_struct_hash = "0x44b6cebf08a4ebe229ae0c7f5d6f7c7c77f66788e83cf6bba0b6cb9a5dffb3d5" + expected_struct_hash = "0xfd94c8eb9dbfabc41329eda323fb9ad4d69eda4f27c1be41cc53c902fb749a4b" struct_hash = builder._create_struct_hash(order) self.assertEqual(expected_struct_hash, struct_hash.hex()) diff --git a/tests/test_market_order_builder.py b/tests/test_market_order_builder.py index 80e4919..2ca3b60 100644 --- a/tests/test_market_order_builder.py +++ b/tests/test_market_order_builder.py @@ -51,14 +51,27 @@ def test_build_market_order(self): self.assertEqual(EOA, mkt_order["sigType"]) def test_build_market_order_signature(self): - expected_sig = "0x88be65ecb593b31977425933df5332f3da1c7b2b54ca033906035dc3d4fd11850e676164e7073e70ef25f881109b39f5b7321df415bc5572d09918c3063669ee1b" + mkt_order_data = MarketOrderData( + exchange_address='0x0165878A594ca255338adfa4d48449f69242Eb8F', + salt=1028957131466, + signer='0x70997970C51812dc3A010C7d01b50e0d17dc79C8', + maker_address='0x70997970C51812dc3A010C7d01b50e0d17dc79C8', + maker_asset_address='0x5FbDB2315678afecb367f032d93F642f64180aa3', + maker_amount=150000000, + maker_asset_id=0, + taker_asset_address='0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512', + taker_asset_id=0, + sig_type=0 + ) + + expected_sig = "0x62a1b1b3634d5ba8eca890fd7954247c7dbe1a50211bdff31753b3687bb6d0311f3df23e52401f73be7f2cd407902696479af8d324fdc9836769993786b710d41c" signer = mock.MagicMock() signer.sign.return_value = expected_sig - builder = MarketOrderBuilder("0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9", 31337, signer) - expected_struct_hash = "0xc568f86a5347e6ace2d4d7eff6215a4669d86ab811be1f9d74ba59717396da90" + builder = MarketOrderBuilder("0x0165878A594ca255338adfa4d48449f69242Eb8F", 31337, signer) + expected_struct_hash = "0x6b5da848321b92bc4c7d045289484063e6e31aa3197bd2ccecad302f6b043b47" - mkt_order = builder.build_market_order(self.generate_data()) + mkt_order = builder.build_market_order(mkt_order_data) self.assertEqual(expected_struct_hash, builder._create_struct_hash(mkt_order).hex()) signature = builder.build_market_order_signature(mkt_order)