From 7a0df1a2d7c59a59e34080e4217a159ff422ef1d Mon Sep 17 00:00:00 2001 From: Andrey Date: Thu, 10 Nov 2022 13:06:37 +0000 Subject: [PATCH] MarketPlace.sol from unique-marketplace --- --- a/tests/src/eth/marketplace/MarketPlace.abi +++ /dev/null @@ -1 +0,0 @@ -[{"inputs":[{"internalType":"address","name":"_escrow","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_price","type":"uint256"},{"indexed":false,"internalType":"address","name":"_currencyCode","type":"address"},{"indexed":false,"internalType":"address","name":"_idCollection","type":"address"},{"indexed":false,"internalType":"uint256","name":"_idNFT","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"orderId","type":"uint256"}],"name":"AddedAsk","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_idCollection","type":"address"},{"indexed":false,"internalType":"uint256","name":"_idNFT","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"orderID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"orderPrice","type":"uint256"}],"name":"BoughtNFT","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_idCollection","type":"address"},{"indexed":false,"internalType":"uint256","name":"_idNFT","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"orderID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"orderPrice","type":"uint256"}],"name":"BoughtNFT4KSM","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_idCollection","type":"address"},{"indexed":false,"internalType":"uint256","name":"_idNFT","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"orderId","type":"uint256"}],"name":"CanceledAsk","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"_sender","type":"address"}],"name":"DepositedKSM","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_price","type":"uint256"},{"indexed":false,"internalType":"address","name":"_currencyCode","type":"address"},{"indexed":false,"internalType":"address","name":"_idCollection","type":"address"},{"indexed":false,"internalType":"uint256","name":"_idNFT","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"_active","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"orderId","type":"uint256"}],"name":"EditedAsk","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"_currencyCode","type":"address"},{"indexed":false,"internalType":"address","name":"_sender","type":"address"}],"name":"Withdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"balance","type":"uint256"}],"name":"WithdrawnAllKSM","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"address","name":"_currencyCode","type":"address"},{"internalType":"address","name":"_idCollection","type":"address"},{"internalType":"uint256","name":"_idNFT","type":"uint256"}],"name":"addAsk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"asks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"asksbySeller","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceKSM","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_idCollection","type":"address"},{"internalType":"uint256","name":"_idNFT","type":"uint256"}],"name":"buy","outputs":[{"internalType":"bool","name":"result","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_idCollection","type":"address"},{"internalType":"uint256","name":"_idNFT","type":"uint256"},{"internalType":"address","name":"_buyer","type":"address"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"buyKSM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_idCollection","type":"address"},{"internalType":"uint256","name":"_idNFT","type":"uint256"}],"name":"cancelAsk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_sender","type":"address"}],"name":"depositKSM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"address","name":"_currencyCode","type":"address"},{"internalType":"address","name":"_idCollection","type":"address"},{"internalType":"uint256","name":"_idNFT","type":"uint256"},{"internalType":"uint8","name":"_active","type":"uint8"}],"name":"editAsk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_idCollection","type":"address"},{"internalType":"uint256","name":"_idNFT","type":"uint256"}],"name":"getOrder","outputs":[{"components":[{"internalType":"uint256","name":"idNFT","type":"uint256"},{"internalType":"address","name":"currencyCode","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"},{"internalType":"address","name":"idCollection","type":"address"},{"internalType":"address","name":"ownerAddr","type":"address"},{"internalType":"uint8","name":"flagActive","type":"uint8"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"tokenURI","type":"string"}],"internalType":"struct MarketPlace.Order","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOrdersLen","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"orders","outputs":[{"internalType":"uint256","name":"idNFT","type":"uint256"},{"internalType":"address","name":"currencyCode","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"},{"internalType":"address","name":"idCollection","type":"address"},{"internalType":"address","name":"ownerAddr","type":"address"},{"internalType":"uint8","name":"flagActive","type":"uint8"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"tokenURI","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newEscrow","type":"address"}],"name":"setEscrow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_coin","type":"address"}],"name":"setNativeCoin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newEscrow","type":"address"}],"name":"setowner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_currencyCode","type":"address"},{"internalType":"address payable","name":"_sender","type":"address"}],"name":"withdraw","outputs":[{"internalType":"bool","name":"result","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"}],"name":"withdrawAllKSM","outputs":[{"internalType":"uint256","name":"lastBalance","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}] \ No newline at end of file --- a/tests/src/eth/marketplace/MarketPlace.bin +++ /dev/null @@ -1 +0,0 @@ -60806040523480156200001157600080fd5b50604051620029b8380380620029b8833981016040819052620000349162000327565b600580546001600160a01b038084166001600160a01b03199283161790925560068054821633179055604080516101408101825260008082526020808301828152838501838152606085018481526080860185815260a0870186815260c0880187815289518088018b5288815260e08a019081528a518089018c528981526101008b01528a51808901909b52888b526101208a019a909a528754600181018955978052885160099098027f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563810198895595517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56487018054918e16918d1691909117905593517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56586015591517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e566850155517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56784018054918b16919099161790975595517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56882018054975160ff16600160a01b026001600160a81b0319909816919098161795909517909555915180519194929362000239937f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5699091019291019062000281565b5061010082015180516200025891600784019160209091019062000281565b5061012082015180516200027791600884019160209091019062000281565b5050505062000396565b8280546200028f9062000359565b90600052602060002090601f016020900481019282620002b35760008555620002fe565b82601f10620002ce57805160ff1916838001178555620002fe565b82800160010185558215620002fe579182015b82811115620002fe578251825591602001919060010190620002e1565b506200030c92915062000310565b5090565b5b808211156200030c576000815560010162000311565b6000602082840312156200033a57600080fd5b81516001600160a01b03811681146200035257600080fd5b9392505050565b600181811c908216806200036e57607f821691505b602082108114156200039057634e487b7160e01b600052602260045260246000fd5b50919050565b61261280620003a66000396000f3fe6080604052600436106101025760003560e01c806399f2d4eb11610095578063c10c354611610064578063c10c354614610221578063cce7ec1314610378578063e22d4f7d1461038b578063edb25841146103c3578063fd8868c7146103f057610184565b806399f2d4eb146102c5578063a85c38ef146102e5578063b460af941461031b578063b4c3e8ea1461034b57610184565b80636b084b25116100d15780636b084b2514610241578063791bd866146102615780638c088f001461028157806393cdd334146102a557610184565b806337c4eb58146101bf5780633ce61756146101e157806340b8074614610201578063592bd7051461022157610184565b366101845760405162461bcd60e51b815260206004820152604160248201527f43616e277420616363657074207061796d656e7420776974686f757420636f6c60448201527f6c656374696f6e20616e64204944732c20757365206441707020746f2073656e6064820152601960fa1b608482015260a4015b60405180910390fd5b60405162461bcd60e51b815260206004820152601060248201526f27379039bab1b410333ab731ba34b7b760811b604482015260640161017b565b3480156101cb57600080fd5b506101df6101da366004612054565b610410565b005b3480156101ed57600080fd5b506101df6101fc36600461209c565b610979565b34801561020d57600080fd5b506101df61021c3660046120c0565b6109c5565b34801561022d57600080fd5b506101df61023c36600461209c565b610c27565b34801561024d57600080fd5b506101df61025c3660046120ec565b610c73565b34801561026d57600080fd5b506101df61027c366004612151565b610ee6565b34801561028d57600080fd5b506000545b6040519081526020015b60405180910390f35b3480156102b157600080fd5b506102926102c036600461209c565b610fb1565b3480156102d157600080fd5b506102926102e03660046120c0565b61105e565b3480156102f157600080fd5b50610305610300366004612181565b61108f565b60405161029c9a999897969594939291906121f6565b34801561032757600080fd5b5061033b610336366004612283565b6112a0565b604051901515815260200161029c565b34801561035757600080fd5b5061029261036636600461209c565b60026020526000908152604090205481565b61033b6103863660046120c0565b6113d2565b34801561039757600080fd5b506102926103a63660046120c0565b600360209081526000928352604080842090915290825290205481565b3480156103cf57600080fd5b506103e36103de3660046120c0565b61181b565b60405161029c91906122c5565b3480156103fc57600080fd5b506101df61040b3660046123a5565b611b0c565b6040516331a9108f60e11b8152600481018290526000906001600160a01b03841690636352211e90602401602060405180830381865afa158015610458573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047c91906123f8565b90506001600160a01b03811633146104d65760405162461bcd60e51b815260206004820152601d60248201527f4f6e6c7920746f6b656e206f776e65722063616e206d616b652061736b000000604482015260640161017b565b6060806060856001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa92505050801561053a57506040513d6000823e601f3d908101601f19168201604052610537919081019061242b565b60015b61055557604051806020016040528060008152509250610558565b92505b856001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa9250505080156105b757506040513d6000823e601f3d908101601f191682016040526105b4919081019061242b565b60015b6105d2576040518060200160405280600081525091506105d5565b91505b60405163c87b56dd60e01b8152600481018690526001600160a01b0387169063c87b56dd90602401600060405180830381865afa92505050801561063b57506040513d6000823e601f3d908101601f19168201604052610638919081019061242b565b60015b6106545750604080516020810190915260008152610657565b90505b60408051610140810182528681526001600160a01b03808a1660208084019182529383018c815242606085019081528b8416608086019081523360a08701908152600160c0880181815260e089018d81526101008a018d90526101208a018c90526000805493840181558052895160099093027f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563810193845597517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56489018054918b166001600160a01b031992831617905596517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56589015594517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56688015592517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e567870180549189169190961617909455517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56885018054925160ff16600160a01b026001600160a81b03199093169190961617179093559151805193949293610828937f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e569909301929190910190611fa3565b506101008201518051610845916007840191602090910190611fa3565b506101208201518051610862916008840191602090910190611fa3565b505060008054909150610877906001906124ee565b6001600160a01b03881660008181526003602090815260408083208b84528252808320859055338084526004808452828520805460018101825590865293909420909201859055516323b872dd60e01b815293945091926323b872dd926108e492909130918c9101612505565b600060405180830381600087803b1580156108fe57600080fd5b505af1158015610912573d6000803e3d6000fd5b5050604080518c81526001600160a01b038c811660208301528b1681830152606081018a90526080810185905290517f83b3a8754d705365b581ab63c329c1e55255a22aa78c67b5fcef378bfb2d9b9993509081900360a0019150a1505050505050505050565b6006546001600160a01b031633146109a35760405162461bcd60e51b815260040161017b90612529565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0382166000908152600360209081526040808320848452909152812054815490913391839081106109ff576109ff612551565b60009182526020909120600560099092020101546001600160a01b031614610a695760405162461bcd60e51b815260206004820152601d60248201527f4f6e6c7920746f6b656e206f776e65722063616e20656469742061736b000000604482015260640161017b565b60008181548110610a7c57610a7c612551565b6000918252602090912060099091020160050154600160a01b900460ff16610adb5760405162461bcd60e51b8152602060048201526012602482015271151a1a5cc8185cdac81a5cc818db1bdcd95960721b604482015260640161017b565b4260008281548110610aef57610aef612551565b9060005260206000209060090201600301819055506000808281548110610b1857610b18612551565b906000526020600020906009020160050160146101000a81548160ff021916908360ff160217905550826001600160a01b03166323b872dd3060008481548110610b6457610b64612551565b60009182526020909120600560099092020101546040516001600160e01b031960e085901b168152610ba592916001600160a01b0316908790600401612505565b600060405180830381600087803b158015610bbf57600080fd5b505af1158015610bd3573d6000803e3d6000fd5b5050604080516001600160a01b0387168152602081018690529081018490527f6330f58b476cc7f9dd8db8130a0fbb49b291ebc32531eb36e9646f56ee20174b9250606001905060405180910390a1505050565b6006546001600160a01b03163314610c515760405162461bcd60e51b815260040161017b90612529565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316600090815260036020908152604080832085845290915281205481549091339183908110610cad57610cad612551565b60009182526020909120600560099092020101546001600160a01b031614610d175760405162461bcd60e51b815260206004820152601d60248201527f4f6e6c7920746f6b656e206f776e65722063616e20656469742061736b000000604482015260640161017b565b60008181548110610d2a57610d2a612551565b6000918252602090912060099091020160050154600160a01b900460ff16610d895760405162461bcd60e51b8152602060048201526012602482015271151a1a5cc8185cdac81a5cc818db1bdcd95960721b604482015260640161017b565b8515610db9578560008281548110610da357610da3612551565b9060005260206000209060090201600201819055505b6001600160a01b03851615610e12578460008281548110610ddc57610ddc612551565b906000526020600020906009020160010160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b4260008281548110610e2657610e26612551565b9060005260206000209060090201600301819055508160008281548110610e4f57610e4f612551565b600091825260209182902060099190910201600501805460ff60a01b1916600160a01b60ff94851602179055604080518981526001600160a01b03898116938201939093529187169082015260608101859052908316608082015260a081018290527f04211d838289b72af597bf28a4ccff5a30d6056f5fce2eddb127ab4ffea0963d9060c00160405180910390a1505050505050565b6005546001600160a01b03163314610f325760405162461bcd60e51b815260206004820152600f60248201526e27b7363c9032b9b1b937bb9031b0b760891b604482015260640161017b565b6001600160a01b038116600090815260026020526040902054610f56908390612567565b6001600160a01b038216600081815260026020908152604091829020939093558051858152928301919091527f291ce0b690061cb1b3f1111bf6500efe526983251fb0f863251ec3670d035fc4910160405180910390a15050565b6005546000906001600160a01b031633146110005760405162461bcd60e51b815260206004820152600f60248201526e27b7363c9032b9b1b937bb9031b0b760891b604482015260640161017b565b506001600160a01b03811660008181526002602090815260408083208054939055805193845290830182905290917f027aeacbc6fbfa7fe735ff8f14a600469ad1a3197ce1c8c8a159641cf68fe592910160405180910390a1919050565b6004602052816000526040600020818154811061107a57600080fd5b90600052602060002001600091509150505481565b6000818154811061109f57600080fd5b600091825260209091206009909102018054600182015460028301546003840154600485015460058601546006870180549698506001600160a01b0395861697949693959283169492821693600160a01b90920460ff1692916111019061257f565b80601f016020809104026020016040519081016040528092919081815260200182805461112d9061257f565b801561117a5780601f1061114f5761010080835404028352916020019161117a565b820191906000526020600020905b81548152906001019060200180831161115d57829003601f168201915b50505050509080600701805461118f9061257f565b80601f01602080910402602001604051908101604052809291908181526020018280546111bb9061257f565b80156112085780601f106111dd57610100808354040283529160200191611208565b820191906000526020600020905b8154815290600101906020018083116111eb57829003601f168201915b50505050509080600801805461121d9061257f565b80601f01602080910402602001604051908101604052809291908181526020018280546112499061257f565b80156112965780601f1061126b57610100808354040283529160200191611296565b820191906000526020600020905b81548152906001019060200180831161127957829003601f168201915b505050505090508a565b6006546000906001600160a01b031633146112cd5760405162461bcd60e51b815260040161017b90612529565b6007546001600160a01b0384811691161461135b5760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820186905284169063a9059cbb906044016020604051808303816000875af1158015611331573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135591906125ba565b50611382565b6040516001600160a01b0383169085156108fc029086906000818181858888f19450505050505b604080518581526001600160a01b03858116602083015284168183015290517fb524bace85e4ce0f8da306e32f39263c5724780ca00b7551c051c8e3dc36adaf9181900360600190a19392505050565b6001600160a01b0382166000908152600360209081526040808320848452909152812054815482918291811061140a5761140a612551565b600091825260209182902060408051610140810182526009939093029091018054835260018101546001600160a01b039081169484019490945260028101549183019190915260038101546060830152600481015483166080830152600581015492831660a0830152600160a01b90920460ff1660c082015260068201805491929160e08401919061149b9061257f565b80601f01602080910402602001604051908101604052809291908181526020018280546114c79061257f565b80156115145780601f106114e957610100808354040283529160200191611514565b820191906000526020600020905b8154815290600101906020018083116114f757829003601f168201915b5050505050815260200160078201805461152d9061257f565b80601f01602080910402602001604051908101604052809291908181526020018280546115599061257f565b80156115a65780601f1061157b576101008083540402835291602001916115a6565b820191906000526020600020905b81548152906001019060200180831161158957829003601f168201915b505050505081526020016008820180546115bf9061257f565b80601f01602080910402602001604051908101604052809291908181526020018280546115eb9061257f565b80156116385780601f1061160d57610100808354040283529160200191611638565b820191906000526020600020905b81548152906001019060200180831161161b57829003601f168201915b5050505050815250509050806040015134146116ac5760405162461bcd60e51b815260206004820152602d60248201527f4e6f7420726967687420616d6f756e742073656e742c206861766520746f206260448201526c6520657175616c20707269636560981b606482015260840161017b565b6001600160a01b0384166000908152600360209081526040808320868452909152812054815482919081106116e3576116e3612551565b906000526020600020906009020160050160146101000a81548160ff021916908360ff160217905550836001600160a01b03166323b872dd3033866040518463ffffffff1660e01b815260040161173c93929190612505565b600060405180830381600087803b15801561175657600080fd5b505af115801561176a573d6000803e3d6000fd5b505050508060a001516001600160a01b03166108fc82604001519081150290604051600060405180830381858888f16001600160a01b03891660008181526003602090815260408083208c8452825291829020548983015183519485529184018c90529183019190915260608201529096507fc220cf2a12d6492e23ed1141c55018997799699d009b00ebd5a4874c60f5c31e9450608001925061180c915050565b60405180910390a15092915050565b61188f6040518061014001604052806000815260200160006001600160a01b03168152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600060ff1681526020016060815260200160608152602001606081525090565b6001600160a01b038316600090815260036020908152604080832085845290915281205481549091908190839081106118ca576118ca612551565b600091825260209182902060408051610140810182526009939093029091018054835260018101546001600160a01b039081169484019490945260028101549183019190915260038101546060830152600481015483166080830152600581015492831660a0830152600160a01b90920460ff1660c082015260068201805491929160e08401919061195b9061257f565b80601f01602080910402602001604051908101604052809291908181526020018280546119879061257f565b80156119d45780601f106119a9576101008083540402835291602001916119d4565b820191906000526020600020905b8154815290600101906020018083116119b757829003601f168201915b505050505081526020016007820180546119ed9061257f565b80601f0160208091040260200160405190810160405280929190818152602001828054611a199061257f565b8015611a665780601f10611a3b57610100808354040283529160200191611a66565b820191906000526020600020905b815481529060010190602001808311611a4957829003601f168201915b50505050508152602001600882018054611a7f9061257f565b80601f0160208091040260200160405190810160405280929190818152602001828054611aab9061257f565b8015611af85780601f10611acd57610100808354040283529160200191611af8565b820191906000526020600020905b815481529060010190602001808311611adb57829003601f168201915b505050919092525091979650505050505050565b6001600160a01b038416600090815260036020908152604080832086845290915281205481548291908110611b4357611b43612551565b600091825260209182902060408051610140810182526009939093029091018054835260018101546001600160a01b039081169484019490945260028101549183019190915260038101546060830152600481015483166080830152600581015492831660a0830152600160a01b90920460ff1660c082015260068201805491929160e084019190611bd49061257f565b80601f0160208091040260200160405190810160405280929190818152602001828054611c009061257f565b8015611c4d5780601f10611c2257610100808354040283529160200191611c4d565b820191906000526020600020905b815481529060010190602001808311611c3057829003601f168201915b50505050508152602001600782018054611c669061257f565b80601f0160208091040260200160405190810160405280929190818152602001828054611c929061257f565b8015611cdf5780601f10611cb457610100808354040283529160200191611cdf565b820191906000526020600020905b815481529060010190602001808311611cc257829003601f168201915b50505050508152602001600882018054611cf89061257f565b80601f0160208091040260200160405190810160405280929190818152602001828054611d249061257f565b8015611d715780601f10611d4657610100808354040283529160200191611d71565b820191906000526020600020905b815481529060010190602001808311611d5457829003601f168201915b505050919092525050600554919250506001600160a01b0316331480611d9f5750336001600160a01b038416145b611df75760405162461bcd60e51b8152602060048201526024808201527f4f6e6c7920657363726f77206f722062757965722063616e2063616c6c206275604482015263794b534d60e01b606482015260840161017b565b6040808201516001600160a01b038516600090815260026020529190912054611e2091906124ee565b6001600160a01b03808516600090815260026020526040808220939093558383015160a085015190921681529190912054611e5b9190612567565b60a08201516001600160a01b039081166000908152600260209081526040808320949094559188168152600382528281208782529091529081205481548291908110611ea957611ea9612551565b906000526020600020906009020160050160146101000a81548160ff021916908360ff160217905550846001600160a01b03166323b872dd3084876040518463ffffffff1660e01b8152600401611f0293929190612505565b600060405180830381600087803b158015611f1c57600080fd5b505af1158015611f30573d6000803e3d6000fd5b505050506001600160a01b038516600081815260036020908152604080832088845282529182902054848301518351948552918401889052838301526060830152517f68bdd3548f3f05742b376651745ca73472eb18f2230f64b893d7a48e575eb0149181900360800190a15050505050565b828054611faf9061257f565b90600052602060002090601f016020900481019282611fd15760008555612017565b82601f10611fea57805160ff1916838001178555612017565b82800160010185558215612017579182015b82811115612017578251825591602001919060010190611ffc565b50612023929150612027565b5090565b5b808211156120235760008155600101612028565b6001600160a01b038116811461205157600080fd5b50565b6000806000806080858703121561206a57600080fd5b84359350602085013561207c8161203c565b9250604085013561208c8161203c565b9396929550929360600135925050565b6000602082840312156120ae57600080fd5b81356120b98161203c565b9392505050565b600080604083850312156120d357600080fd5b82356120de8161203c565b946020939093013593505050565b600080600080600060a0868803121561210457600080fd5b8535945060208601356121168161203c565b935060408601356121268161203c565b925060608601359150608086013560ff8116811461214357600080fd5b809150509295509295909350565b6000806040838503121561216457600080fd5b8235915060208301356121768161203c565b809150509250929050565b60006020828403121561219357600080fd5b5035919050565b60005b838110156121b557818101518382015260200161219d565b838111156121c4576000848401525b50505050565b600081518084526121e281602086016020860161219a565b601f01601f19169290920160200192915050565b8a81526001600160a01b038a81166020830152604082018a9052606082018990528781166080830152861660a082015260ff851660c082015261014060e08201819052600090612248838201876121ca565b905082810361010084015261225d81866121ca565b905082810361012084015261227281856121ca565b9d9c50505050505050505050505050565b60008060006060848603121561229857600080fd5b8335925060208401356122aa8161203c565b915060408401356122ba8161203c565b809150509250925092565b6020815281516020820152600060208301516122ec60408401826001600160a01b03169052565b506040830151606083015260608301516080830152608083015161231b60a08401826001600160a01b03169052565b5060a08301516001600160a01b03811660c08401525060c083015160ff811660e08401525060e0830151610140610100818186015261235e6101608601846121ca565b9250808601519050601f1961012081878603018188015261237f85846121ca565b90880151878203909201848801529350905061239b83826121ca565b9695505050505050565b600080600080608085870312156123bb57600080fd5b84356123c68161203c565b93506020850135925060408501356123dd8161203c565b915060608501356123ed8161203c565b939692955090935050565b60006020828403121561240a57600080fd5b81516120b98161203c565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561243d57600080fd5b815167ffffffffffffffff8082111561245557600080fd5b818401915084601f83011261246957600080fd5b81518181111561247b5761247b612415565b604051601f8201601f19908116603f011681019083821181831017156124a3576124a3612415565b816040528281528760208487010111156124bc57600080fd5b6124cd83602083016020880161219a565b979650505050505050565b634e487b7160e01b600052601160045260246000fd5b600082821015612500576125006124d8565b500390565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6020808252600e908201526d27b7363c9037bbb732b91031b0b760911b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000821982111561257a5761257a6124d8565b500190565b600181811c9082168061259357607f821691505b602082108114156125b457634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156125cc57600080fd5b815180151581146120b957600080fdfea26469706673582212205a8295bbb792776496ccaaa9cb7384efe95af6490ca8015ceb6eb22e5ab3ae6b64736f6c634300080a0033 \ No newline at end of file --- a/tests/src/eth/marketplace/MarketPlace.sol +++ b/tests/src/eth/marketplace/MarketPlace.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: Apache License pragma solidity >=0.8.0; -import "../api/UniqueNFT.sol"; +import {UniqueNFT, Dummy, ERC165} from "../api/UniqueNFT.sol"; // Inline interface ERC20Events { @@ -52,8 +52,9 @@ contract MarketPlace { struct Order { + uint256 idNFT; - address currencyCode; // UNIQ tokens as address address (1); wKSM + address currencyCode; // UNIQ tokens as address address (1); wKSM uint256 price; uint256 time; address idCollection; @@ -61,330 +62,353 @@ uint8 flagActive; string name; string symbol; - string tokenURI; + string tokenURI; } - Order[] public orders; - uint256 test; - mapping(address => uint256) public balanceKSM; // [ownerAddr][currency] => [KSMs] - mapping(address => mapping(uint256 => uint256)) public asks; // [buyer][idCollection][idNFT] => idorder + Order[] public orders; + uint test; + mapping (address => uint256) public balanceKSM; // [ownerAddr][currency] => [KSMs] + mapping (address => mapping (uint256 => uint256)) public asks ; // [buyer][idCollection][idNFT] => idorder + mapping (address => mapping (uint => uint[])) public ordersbyNFT; // [addressCollection] =>idNFT =>idorder + + mapping (address => uint[]) public asksbySeller; // [addressSeller] =>idorder - mapping(address => uint256[]) public asksbySeller; // [addressSeller] =>idorder + mapping (address =>bool) internal isEscrow; - address escrow; + //address escrow; address owner; address nativecoin; - constructor(address _escrow) { - escrow = _escrow; + // from abstract contract ReentrancyGuard + // Booleans are more expensive than uint256 or any type that takes up a full + // word because each write operation emits an extra SLOAD to first read the + // slot's contents, replace the bits taken up by the boolean, and then write + // back. This is the compiler's defense against contract upgrades and + // pointer aliasing, and it cannot be disabled. + + // The values being non-zero value makes deployment a bit more expensive, + // but in exchange the refund on every call to nonReentrant will be lower in + // amount. Since refunds are capped to a percentage of the total + // transaction's gas, it is best to keep them low in cases like this one, to + // increase the likelihood of the full refund coming into effect. + uint8 private constant _NOT_ENTERED = 1; + uint8 private constant _ENTERED = 2; + + uint8 private _status; + + struct NFT { + address collection; + uint256 id; + } + + //function initialize() public initializer { + constructor () { // call setEscrow directly owner = msg.sender; - orders.push( - Order(0, address(0), 0, 0, address(0), address(0), 0, "", "", "") - ); + orders.push(Order( + 0, + address(0), + 0, + 0, + address(0), + address(0), + 0, "","","")); + _status = _NOT_ENTERED; + } - function setowner(address _newEscrow) public onlyOwner { - escrow = _newEscrow; - } + modifier nonReentrant() { // from abstract contract ReentrancyGuard + // On the first call to nonReentrant, _notEntered will be true + require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); - function setEscrow(address _newEscrow) public onlyOwner { - escrow = _newEscrow; - } + // Any calls to nonReentrant after this point will fail + _status = _ENTERED; - function setNativeCoin(address _coin) public onlyOwner { - nativecoin = _coin; + _; + + // By storing the original value once again, a refund is triggered (see + // https://eips.ethereum.org/EIPS/eip-2200) + _status = _NOT_ENTERED; } - modifier onlyEscrow() { - require(msg.sender == escrow, "Only escrow can"); + modifier onlyEscrow () { + require(isEscrow [msg.sender] , "Only escrow can"); _; } - modifier onlyOwner() { + modifier onlyOwner () { require(msg.sender == owner, "Only owner can"); _; } /** - * Make bids (orders) to sell NFTs - */ + * Make bids (orders) to sell NFTs + */ - receive() external payable { - revert( - "Can't accept payment without collection and IDs, use dApp to send" - ); + + receive () external payable { + // revert ("Can't accept payment without collection and IDs, use dApp to send"); } + fallback () external payable { + revert ("No such function"); + } - fallback() external payable { - revert("No such function"); - } + event AddedAsk (uint256 _price, + address _currencyCode, + address _idCollection, + uint256 _idNFT, + uint256 orderId + ); + event EditedAsk (uint256 _price, + address _currencyCode, + address _idCollection, + uint256 _idNFT, + uint8 _active, + uint orderId); - event AddedAsk( - uint256 _price, - address _currencyCode, - address _idCollection, - uint256 _idNFT, - uint256 orderId - ); - event EditedAsk( - uint256 _price, - address _currencyCode, - address _idCollection, - uint256 _idNFT, - uint8 _active, - uint256 orderId - ); + event CanceledAsk (address _idCollection, + uint256 _idNFT, + uint orderId + ); + + event DepositedKSM (uint256 _amount, address _sender); + + event BoughtNFT4KSM (address _idCollection, uint256 _idNFT, uint orderID, uint orderPrice ); + + event BoughtNFT (address _idCollection, uint256 _idNFT, uint orderID, uint orderPrice ); + + event WithdrawnAllKSM (address _sender, uint256 balance); - event CanceledAsk(address _idCollection, uint256 _idNFT, uint256 orderId); + event WithdrawnKSM (address _sender, uint256 balance); - event DepositedKSM(uint256 _amount, address _sender); + event Withdrawn (uint256 _amount, address _currencyCode, address _sender); + - event BoughtNFT4KSM( - address _idCollection, - uint256 _idNFT, - uint256 orderID, - uint256 orderPrice - ); + function setOwner (address _newOwner) public onlyOwner { + owner = _newOwner; + } - event BoughtNFT( - address _idCollection, - uint256 _idNFT, - uint256 orderID, - uint256 orderPrice - ); + function setEscrow (address _escrow, bool _state) public onlyOwner returns (bool) { + if (isEscrow[_escrow] != _state) { + isEscrow[_escrow] = _state; + return true; + } + return false; + } - event WithdrawnAllKSM(address _sender, uint256 balance); + function setNativeCoin (address _coin) public onlyOwner { + nativecoin = _coin; + } - event Withdrawn(uint256 _amount, address _currencyCode, address _sender); - function addAsk( - uint256 _price, - address _currencyCode, - address _idCollection, - uint256 _idNFT - ) public { - // + function addAsk (uint256 _price, + address _currencyCode, + address _idCollection, + uint256 _idNFT + ) public { // address ownerNFT = UniqueNFT(_idCollection).ownerOf(_idNFT); - require(ownerNFT == msg.sender, "Only token owner can make ask"); + require (ownerNFT == msg.sender, "Only token owner can make ask"); string memory nameNFT; string memory symbolNFT; string memory uriNFT; try UniqueNFT(_idCollection).name() returns (string memory name_) { nameNFT = name_; - } catch { - nameNFT = ""; } + catch { + nameNFT=""; + } try UniqueNFT(_idCollection).symbol() returns (string memory symbol_) { symbolNFT = symbol_; - } catch { - symbolNFT = ""; } - try UniqueNFT(_idCollection).tokenURI(_idNFT) returns ( - string memory uri_ - ) { + catch { + symbolNFT=""; + } + try UniqueNFT(_idCollection).tokenURI(_idNFT) returns (string memory uri_) { uriNFT = uri_; - } catch { - uriNFT = ""; } - orders.push( - Order( - _idNFT, - _currencyCode, - _price, - block.timestamp, - _idCollection, - msg.sender, - 1, // 1 = is active - nameNFT, - symbolNFT, - uriNFT - ) - ); + catch { + uriNFT=""; + } + orders.push(Order( + _idNFT, + _currencyCode, + _price, + block.timestamp, + _idCollection, + msg.sender, + 1, // 1 = is active + nameNFT, + symbolNFT, + uriNFT + )); + + uint orderId = orders.length-1; + asks[_idCollection][_idNFT] = orderId; + asksbySeller[msg.sender].push(orderId); + UniqueNFT(_idCollection).transferFrom(msg.sender, address(this), _idNFT); + emit AddedAsk(_price, _currencyCode, _idCollection, _idNFT, orderId); + } - uint256 orderId = orders.length - 1; - asks[_idCollection][_idNFT] = orderId; - asksbySeller[msg.sender].push(orderId); - UniqueNFT(_idCollection).transferFrom( - msg.sender, - address(this), - _idNFT - ); - emit AddedAsk(_price, _currencyCode, _idCollection, _idNFT, orderId); - } + function editAsk (uint256 _price, + address _currencyCode, + address _idCollection, + uint256 _idNFT, + uint8 _active) public { + - function editAsk( - uint256 _price, - address _currencyCode, - address _idCollection, - uint256 _idNFT, - uint8 _active - ) public { - uint256 orderID = asks[_idCollection][_idNFT]; + uint orderID = asks[_idCollection][_idNFT]; - require( - orders[orderID].ownerAddr == msg.sender, - "Only token owner can edit ask" - ); - require(orders[orderID].flagActive != 0, "This ask is closed"); - if (_price > 0) { - orders[orderID].price = _price; + require (orders[orderID].ownerAddr == msg.sender, "Only token owner can edit ask"); + require (orders[orderID].flagActive != 0, "This ask is closed"); + if (_price> 0 ) { + orders[orderID].price = _price ; } - - if (_currencyCode != address(0)) { - orders[orderID].currencyCode = _currencyCode; + + if (_currencyCode != address(0) ) { + orders[orderID].currencyCode = _currencyCode ; } orders[orderID].time = block.timestamp; orders[orderID].flagActive = _active; + + emit EditedAsk(_price, _currencyCode, _idCollection, _idNFT, _active, orderID); + } + - emit EditedAsk( - _price, - _currencyCode, - _idCollection, - _idNFT, - _active, - orderID - ); - } + function cancelAsk (address _idCollection, + uint256 _idNFT + ) public { - function cancelAsk(address _idCollection, uint256 _idNFT) public { - uint256 orderID = asks[_idCollection][_idNFT]; + uint orderID = asks[_idCollection][_idNFT]; - require( - orders[orderID].ownerAddr == msg.sender, - "Only token owner can edit ask" - ); - require(orders[orderID].flagActive != 0, "This ask is closed"); + require (orders[orderID].ownerAddr == msg.sender, "Only token owner can edit ask"); + require (orders[orderID].flagActive != 0, "This ask is closed"); orders[orderID].time = block.timestamp; orders[orderID].flagActive = 0; - UniqueNFT(_idCollection).transferFrom( - address(this), - orders[orderID].ownerAddr, - _idNFT - ); + UniqueNFT(_idCollection).transferFrom(address(this),orders[orderID].ownerAddr, _idNFT); emit CanceledAsk(_idCollection, _idNFT, orderID); - } + } + - function depositKSM(uint256 _amount, address _sender) public onlyEscrow { + function depositKSM (uint256 _amount, address _sender) public onlyEscrow { balanceKSM[_sender] = balanceKSM[_sender] + _amount; emit DepositedKSM(_amount, _sender); } - function buyKSM( - address _idCollection, - uint256 _idNFT, - address _buyer, - address _receiver - ) public { - Order memory order = orders[asks[_idCollection][_idNFT]]; - require(msg.sender == escrow || msg.sender == _buyer, "Only escrow or buyer can call buyKSM" ); + function buyKSM (address _idCollection, uint256 _idNFT, address _buyer, address _receiver ) public { + + Order memory order = orders[ asks[_idCollection][_idNFT]]; + require(isEscrow[msg.sender] || msg.sender == _buyer, "Only escrow or buyer can call buyKSM" ); //1. reduce balance + balanceKSM[_buyer] = balanceKSM[_buyer] - order.price; balanceKSM[order.ownerAddr] = balanceKSM[order.ownerAddr] + order.price; // 2. close order - orders[asks[_idCollection][_idNFT]].flagActive = 0; + orders[ asks[_idCollection][_idNFT]].flagActive = 0; // 3. transfer NFT to buyer UniqueNFT(_idCollection).transferFrom(address(this), _receiver, _idNFT); - emit BoughtNFT4KSM( - _idCollection, - _idNFT, - asks[_idCollection][_idNFT], - order.price - ); + emit BoughtNFT4KSM(_idCollection, _idNFT, asks[_idCollection][_idNFT], order.price); + } - - function buy(address _idCollection, uint256 _idNFT) - public - payable - returns (bool result) - { - //buing for UNQ like as ethers - - Order memory order = orders[asks[_idCollection][_idNFT]]; + function buy (address _idCollection, uint256 _idNFT ) public payable returns (bool result) { //buing for UNQ like as ethers + + Order memory order = orders[asks[_idCollection][_idNFT]]; //1. check sent amount and send to seller - require( - msg.value == order.price, - "Not right amount sent, have to be equal price" - ); + require (msg.value == order.price, "Not right amount sent, have to be equal price" ); // 2. close order - orders[asks[_idCollection][_idNFT]].flagActive = 0; - + orders[ asks[_idCollection][_idNFT]].flagActive = 0; + // 3. transfer NFT to buyer - UniqueNFT(_idCollection).transferFrom( - address(this), - msg.sender, - _idNFT - ); + UniqueNFT(_idCollection).transferFrom(address(this), msg.sender, _idNFT); //uint balance = address(this).balance; - result = payable(order.ownerAddr).send(order.price); - emit BoughtNFT( - _idCollection, - _idNFT, - asks[_idCollection][_idNFT], - order.price - ); + result = payable(order.ownerAddr).send (order.price); + emit BoughtNFT(_idCollection, _idNFT, asks[_idCollection][_idNFT], order.price); + } - /* - function buyOther (address _idCollection, uint256 _idNFT, address _currencyCode, uint _amount ) public { //buy for sny token if seller wants +/* + function buyOther (address _idCollection, uint256 _idNFT, address _currencyCode, uint _amount ) public { //buy for sny token if seller wants + + Order memory order = orders[ asks[_idCollection][_idNFT]]; + //1. check sent amount and transfer from buyer to seller + require (order.price == _amount && order.currencyCode == _currencyCode, "Not right amount or currency sent, have to be equal currency and price" ); + // !!! transfer have to be approved to marketplace! + UniqueFungible(order.currencyCode).transferFrom(msg.sender, address(this), order.price); //to not disclojure buyer's address + UniqueFungible(order.currencyCode).transfer(order.ownerAddr, order.price); + // 2. close order + orders[ asks[_idCollection][_idNFT]].flagActive = 0; + // 3. transfer NFT to buyer + UniqueNFT(_idCollection).transferFrom(address(this), msg.sender, _idNFT); - Order memory order = orders[ asks[_idCollection][_idNFT]]; - //1. check sent amount and transfer from buyer to seller - require (order.price == _amount && order.currencyCode == _currencyCode, "Not right amount or currency sent, have to be equal currency and price" ); - // !!! transfer have to be approved to marketplace! - IERC20(order.currencyCode).transferFrom(msg.sender, address(this), order.price); //to not disclojure buyer's address - IERC20(order.currencyCode).transfer(order.ownerAddr, order.price); - // 2. close order - orders[ asks[_idCollection][_idNFT]].flagActive = 0; - // 3. transfer NFT to buyer - IERC721ext(_idCollection).transferFrom(address(this), msg.sender, _idNFT); + } + */ - } - */ + function withdrawAllKSM (address _sender) public nonReentrant returns (uint lastBalance ){ + require(isEscrow[msg.sender] || msg.sender == _sender, "Only escrow or balance owner can withdraw all KSM" ); - function withdrawAllKSM(address _sender) - public - onlyEscrow - returns (uint256 lastBalance) - { lastBalance = balanceKSM[_sender]; - balanceKSM[_sender] = 0; + balanceKSM[_sender] =0; emit WithdrawnAllKSM(_sender, lastBalance); } - function withdraw( - uint256 _amount, - address _currencyCode, - address payable _sender - ) public onlyOwner returns (bool result) { - if (_currencyCode != nativecoin) { - //erc20 compat. tokens on UNIQUE chain - // uint balance = IERC20(_currencyCode).balanceOf(address(this)); + function withdrawKSM (uint _amount, address _sender) onlyEscrow public { + balanceKSM[_sender] = balanceKSM[_sender] - _amount; + emit WithdrawnKSM(_sender, balanceKSM[_sender]); + + } + + function withdraw (uint256 _amount, address _currencyCode) public nonReentrant returns (bool result ){ //onlyOwner + address payable _sender = payable( msg.sender); + if (_currencyCode != nativecoin ) { //erc20 compat. tokens on UNIQUE chain + // uint balance = UniqueFungible(_currencyCode).balanceOf(address(this)); UniqueFungible(_currencyCode).transfer(_sender, _amount); } else { // uint balance = address(this).balance; - result = (_sender).send(_amount); // for UNQ like as ethers + result = (_sender).send(_amount); // for UNQ like as ethers } emit Withdrawn(_amount, _currencyCode, _sender); return result; + } - // event GettedOrder(uint , Order); - function getOrder(address _idCollection, uint256 _idNFT) - public - view - returns (Order memory) - { - uint256 orderId = asks[_idCollection][_idNFT]; + + // event GettedOrder(uint , Order); + function getOrder (address _idCollection, uint256 _idNFT) public view returns (Order memory) { + uint orderId = asks[_idCollection][_idNFT]; Order memory order = orders[orderId]; - // emit GettedOrder (orderId, order); + // emit GettedOrder (orderId, order); return order; } - function getOrdersLen() public view returns (uint256) { + function getOrdersLen () public view returns (uint) { return orders.length; } + + function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) public pure returns(bytes4) { + return bytes4(keccak256("onERC721Received(address,address,uint256,bytes)")); + } + + //TODO make destructing function to return all + function terminate(address[] calldata tokens, NFT[] calldata nfts) public onlyOwner { + // Transfer tokens to owner (TODO: error handling) + for (uint i = 0; i < tokens.length; i++) { + address addr = tokens[i]; + UniqueFungible token = UniqueFungible(addr); + uint256 balance = token.balanceOf(address(this)); + token.transfer(owner, balance); + } + for (uint i = 0; i < nfts.length; i++) { + address addr = nfts[i].collection; + UniqueNFT token = UniqueNFT(addr); + token.transferFrom(address(this), owner, nfts[i].id); + } + // Transfer Eth to owner and terminate contract + address payable owner1 = payable (owner); + uint balance = address(this).balance; + owner1.transfer(balance); + + } + } --- a/tests/src/eth/marketplace/marketplace.test.ts +++ b/tests/src/eth/marketplace/marketplace.test.ts @@ -46,13 +46,8 @@ }); itEth('With UNQ', async ({helper}) => { - const web3 = helper.getWeb3(); const matcherOwner = await helper.eth.createAccountWithBalance(donor); - const matcherContract = new web3.eth.Contract(JSON.parse((await readFile(`${__dirname}/MarketPlace.abi`)).toString()), undefined, { - from: matcherOwner, - gas: helper.eth.DEFAULT_GAS, - }); - const matcher = await matcherContract.deploy({data: (await readFile(`${__dirname}/MarketPlace.bin`)).toString(), arguments:[matcherOwner]}).send({from: matcherOwner}); + const matcher = await helper.ethContract.deployByCode(matcherOwner, 'MarketPlace', (await readFile(`${__dirname}/MarketPlace.sol`)).toString(), [{solPath: 'api/UniqueNFT.sol', fsPath: `${__dirname}/../api/UniqueNFT.sol`}], helper.eth.DEFAULT_GAS * 2); const sponsor = await helper.eth.createAccountWithBalance(donor); const helpers = helper.ethNativeContract.contractHelpers(matcherOwner); @@ -103,17 +98,12 @@ }); itEth('With escrow', async ({helper}) => { - const web3 = helper.getWeb3(); const matcherOwner = await helper.eth.createAccountWithBalance(donor); - const matcherContract = new web3.eth.Contract(JSON.parse((await readFile(`${__dirname}/MarketPlace.abi`)).toString()), undefined, { - from: matcherOwner, - gas: helper.eth.DEFAULT_GAS, - }); - const matcher = await matcherContract.deploy({data: (await readFile(`${__dirname}/MarketPlace.bin`)).toString(), arguments: [matcherOwner]}).send({from: matcherOwner, gas: 10000000}); + const matcher = await helper.ethContract.deployByCode(matcherOwner, 'MarketPlace', (await readFile(`${__dirname}/MarketPlace.sol`)).toString(), [{solPath: 'api/UniqueNFT.sol', fsPath: `${__dirname}/../api/UniqueNFT.sol`}], helper.eth.DEFAULT_GAS * 2); const sponsor = await helper.eth.createAccountWithBalance(donor); const escrow = await helper.eth.createAccountWithBalance(donor); - await matcher.methods.setEscrow(escrow).send({from: matcherOwner}); + await matcher.methods.setEscrow(escrow, true).send({from: matcherOwner}); const helpers = helper.ethNativeContract.contractHelpers(matcherOwner); await helpers.methods.setSponsoringMode(matcher.options.address, SponsoringMode.Allowlisted).send({from: matcherOwner}); await helpers.methods.setSponsoringRateLimit(matcher.options.address, 1).send({from: matcherOwner}); @@ -172,13 +162,8 @@ }); itEth('Sell tokens from substrate user via EVM contract', async ({helper}) => { - const web3 = helper.getWeb3(); const matcherOwner = await helper.eth.createAccountWithBalance(donor); - const matcherContract = new web3.eth.Contract(JSON.parse((await readFile(`${__dirname}/MarketPlace.abi`)).toString()), undefined, { - from: matcherOwner, - gas: helper.eth.DEFAULT_GAS, - }); - const matcher = await matcherContract.deploy({data: (await readFile(`${__dirname}/MarketPlace.bin`)).toString(), arguments:[matcherOwner]}).send({from: matcherOwner}); + const matcher = await helper.ethContract.deployByCode(matcherOwner, 'MarketPlace', (await readFile(`${__dirname}/MarketPlace.sol`)).toString(), [{solPath: 'api/UniqueNFT.sol', fsPath: `${__dirname}/../api/UniqueNFT.sol`}], helper.eth.DEFAULT_GAS * 2); await helper.eth.transferBalanceFromSubstrate(donor, matcher.options.address); --- a/tests/src/eth/util/playgrounds/unique.dev.ts +++ b/tests/src/eth/util/playgrounds/unique.dev.ts @@ -79,17 +79,17 @@ }; } - async deployByCode(signer: string, name: string, src: string, imports?: ContractImports[]): Promise { + async deployByCode(signer: string, name: string, src: string, imports?: ContractImports[], gas?: number): Promise { const compiledContract = await this.compile(name, src, imports); - return this.deployByAbi(signer, compiledContract.abi, compiledContract.object); + return this.deployByAbi(signer, compiledContract.abi, compiledContract.object, gas); } - async deployByAbi(signer: string, abi: any, object: string): Promise { + async deployByAbi(signer: string, abi: any, object: string, gas?: number): Promise { const web3 = this.helper.getWeb3(); const contract = new web3.eth.Contract(abi, undefined, { data: object, from: signer, - gas: this.helper.eth.DEFAULT_GAS, + gas: gas ?? this.helper.eth.DEFAULT_GAS, }); return await contract.deploy({data: object}).send({from: signer}); } -- gitstuff