difftreelog
fix remove debug call
in: master
2 files changed
tests/src/eth/marketplace/MarketPlaceUNQ.bindiffbeforeafterboth--- a/tests/src/eth/marketplace/MarketPlaceUNQ.bin
+++ b/tests/src/eth/marketplace/MarketPlaceUNQ.bin
@@ -1 +1 @@
-608060405234801561001057600080fd5b50600380546001600160a01b03191633179055610f9a806100326000396000f3fe6080604052600436106100705760003560e01c806399f2d4eb1161004e57806399f2d4eb14610120578063b3ffb7601461014e578063cce7ec1314610161578063e22d4f7d1461017457600080fd5b8063592bd705146100755780637b1d6001146100975780638a72ea6a146100b7575b600080fd5b34801561008157600080fd5b50610095610090366004610d98565b6101ac565b005b3480156100a357600080fd5b506100956100b2366004610e88565b61021e565b3480156100c357600080fd5b506100d76100d2366004610e6f565b6107aa565b604080519788526001600160a01b03968716602089015287019490945260608601929092528316608085015290911660a083015260ff1660c082015260e0015b60405180910390f35b34801561012c57600080fd5b5061014061013b366004610dd9565b61080d565b604051908152602001610117565b61009561015c366004610e05565b61083e565b61009561016f366004610dd9565b610b78565b34801561018057600080fd5b5061014061018f366004610dd9565b600160209081526000928352604080842090915290825290205481565b6003546001600160a01b031633146101fc5760405162461bcd60e51b815260206004820152600e60248201526d27b7363c9037bbb732b91031b0b760911b60448201526064015b60405180910390fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6040516317a87dfd60e11b815260206004820152600360248201526261736b60e81b60448201526001600160a01b03841690632f50fbfa90606401600060405180830381600087803b15801561027357600080fd5b505af1158015610287573d6000803e3d6000fd5b50506040516331a9108f60e11b8152600481018590523392506001600160a01b0386169150636352211e9060240160206040518083038186803b1580156102cd57600080fd5b505afa1580156102e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103059190610dbc565b6001600160a01b0316146103535760405162461bcd60e51b81526020600482015260156024820152742737ba103934b3b43a103a37b5b2b71037bbb732b960591b60448201526064016101f3565b6001600160a01b0383166000908152600160209081526040808320858452909152812054905415806103bd575060006001600160a01b03166000828154811061039e5761039e610f36565b60009182526020909120600460069092020101546001600160a01b0316145b156105af576040805160e0810182528481526001600160a01b03878116602083019081529282018981524260608401908152888316608085019081523360a0860190815260ff89811660c08801908152600080546001808201835582805299517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56360069092029182015599517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5648b0180546001600160a01b0319908116928b1692909217905596517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5658b015594517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5668a015592517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5678901805490961690871617909455517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56890960180549151969094166001600160a81b031990911617600160a01b959092169490940217905590546105569190610f11565b6001600160a01b0385166000908152600160208181526040808420888552825280842094909455338352600290529181209054909161059491610f11565b81546001810183556000928352602090922090910155610740565b6040805160e0810182526001600160a01b03861660009081526001602090815283822087835290529182205482549192839290919081106105f2576105f2610f36565b6000918252602080832060069092029091015483526001600160a01b03808a168483015260408085018c90524260608601529089168352600182528083208884529091528120548154608090930192811061064f5761064f610f36565b60009182526020808320600460069093020191909101546001600160a01b039081168452338483015260ff87166040948501528816825260018152828220878352905290812054815481106106a6576106a6610f36565b60009182526020918290208351600690920201908155908201516001820180546001600160a01b039283166001600160a01b031991821617909155604084015160028401556060840151600384015560808401516004840180549184169190921617905560a08301516005909201805460c09094015160ff16600160a01b026001600160a81b031990941692909116919091179190911790555b6040516323b872dd60e01b81526001600160a01b038516906323b872dd9061077090339030908890600401610eed565b600060405180830381600087803b15801561078a57600080fd5b505af115801561079e573d6000803e3d6000fd5b50505050505050505050565b600081815481106107ba57600080fd5b60009182526020909120600690910201805460018201546002830154600384015460048501546005909501549395506001600160a01b03928316949193909291821691811690600160a01b900460ff1687565b6002602052816000526040600020818154811061082957600080fd5b90600052602060002001600091509150505481565b6001600160a01b03841660009081526001602090815260408083208684529091528120548154829190811061087557610875610f36565b60009182526020918290206040805160e0810182526006939093029091018054835260018101546001600160a01b03908116948401949094526002810154918301829052600381015460608401526004810154841660808401526005015492831660a0830152600160a01b90920460ff1660c08201529150821480156109105750826001600160a01b031681602001516001600160a01b0316145b6109915760405162461bcd60e51b815260206004820152604660248201527f4e6f7420726967687420616d6f756e74206f722063757272656e63792073656e60448201527f742c206861766520746f20626520657175616c2063757272656e637920616e6460648201526520707269636560d01b608482015260a4016101f3565b80602001516001600160a01b03166323b872dd333084604001516040518463ffffffff1660e01b81526004016109c993929190610eed565b602060405180830381600087803b1580156109e357600080fd5b505af11580156109f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1b9190610e4d565b50602081015160a0820151604080840151905163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291169063a9059cbb90604401602060405180830381600087803b158015610a7657600080fd5b505af1158015610a8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aae9190610e4d565b506001600160a01b038516600090815260016020908152604080832087845290915281205481548291908110610ae657610ae6610f36565b906000526020600020906006020160050160146101000a81548160ff021916908360ff160217905550846001600160a01b03166323b872dd3033876040518463ffffffff1660e01b8152600401610b3f93929190610eed565b600060405180830381600087803b158015610b5957600080fd5b505af1158015610b6d573d6000803e3d6000fd5b505050505050505050565b6001600160a01b038216600090815260016020908152604080832084845290915281205481548291908110610baf57610baf610f36565b60009182526020918290206040805160e0810182526006939093029091018054835260018101546001600160a01b03908116948401949094526002810154918301829052600381015460608401526004810154841660808401526005015492831660a0830152600160a01b90920460ff1660c082015291503414610c8f5760405162461bcd60e51b815260206004820152603160248201527f4e6f7420726967687420616d6f756e7420554e512073656e742c206861766520604482015270746f20626520657175616c20707269636560781b60648201526084016101f3565b8060a001516001600160a01b03166108fc82604001519081150290604051600060405180830381858888f19350505050158015610cd0573d6000803e3d6000fd5b506001600160a01b038316600090815260016020908152604080832085845290915281205481548291908110610d0857610d08610f36565b906000526020600020906006020160050160146101000a81548160ff021916908360ff160217905550826001600160a01b03166323b872dd3033856040518463ffffffff1660e01b8152600401610d6193929190610eed565b600060405180830381600087803b158015610d7b57600080fd5b505af1158015610d8f573d6000803e3d6000fd5b50505050505050565b600060208284031215610daa57600080fd5b8135610db581610f4c565b9392505050565b600060208284031215610dce57600080fd5b8151610db581610f4c565b60008060408385031215610dec57600080fd5b8235610df781610f4c565b946020939093013593505050565b60008060008060808587031215610e1b57600080fd5b8435610e2681610f4c565b9350602085013592506040850135610e3d81610f4c565b9396929550929360600135925050565b600060208284031215610e5f57600080fd5b81518015158114610db557600080fd5b600060208284031215610e8157600080fd5b5035919050565b600080600080600060a08688031215610ea057600080fd5b853594506020860135610eb281610f4c565b93506040860135610ec281610f4c565b925060608601359150608086013560ff81168114610edf57600080fd5b809150509295509295909350565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600082821015610f3157634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114610f6157600080fd5b5056fea2646970667358221220f1d3a989bed0f05028785628ff58624c8d96c5eba3ecf0b15a41660023e3eadf64736f6c63430008070033
\ No newline at end of file
+608060405234801561001057600080fd5b50600380546001600160a01b03191633179055610f2d806100326000396000f3fe6080604052600436106100705760003560e01c806399f2d4eb1161004e57806399f2d4eb14610120578063b3ffb7601461014e578063cce7ec1314610161578063e22d4f7d1461017457600080fd5b8063592bd705146100755780637b1d6001146100975780638a72ea6a146100b7575b600080fd5b34801561008157600080fd5b50610095610090366004610d2b565b6101ac565b005b3480156100a357600080fd5b506100956100b2366004610e1b565b61021e565b3480156100c357600080fd5b506100d76100d2366004610e02565b61073d565b604080519788526001600160a01b03968716602089015287019490945260608601929092528316608085015290911660a083015260ff1660c082015260e0015b60405180910390f35b34801561012c57600080fd5b5061014061013b366004610d6c565b6107a0565b604051908152602001610117565b61009561015c366004610d98565b6107d1565b61009561016f366004610d6c565b610b0b565b34801561018057600080fd5b5061014061018f366004610d6c565b600160209081526000928352604080842090915290825290205481565b6003546001600160a01b031633146101fc5760405162461bcd60e51b815260206004820152600e60248201526d27b7363c9037bbb732b91031b0b760911b60448201526064015b60405180910390fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6040516331a9108f60e11b81526004810183905233906001600160a01b03851690636352211e9060240160206040518083038186803b15801561026057600080fd5b505afa158015610274573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102989190610d4f565b6001600160a01b0316146102e65760405162461bcd60e51b81526020600482015260156024820152742737ba103934b3b43a103a37b5b2b71037bbb732b960591b60448201526064016101f3565b6001600160a01b038316600090815260016020908152604080832085845290915281205490541580610350575060006001600160a01b03166000828154811061033157610331610ec9565b60009182526020909120600460069092020101546001600160a01b0316145b15610542576040805160e0810182528481526001600160a01b03878116602083019081529282018981524260608401908152888316608085019081523360a0860190815260ff89811660c08801908152600080546001808201835582805299517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56360069092029182015599517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5648b0180546001600160a01b0319908116928b1692909217905596517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5658b015594517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5668a015592517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5678901805490961690871617909455517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56890960180549151969094166001600160a81b031990911617600160a01b959092169490940217905590546104e99190610ea4565b6001600160a01b0385166000908152600160208181526040808420888552825280842094909455338352600290529181209054909161052791610ea4565b815460018101835560009283526020909220909101556106d3565b6040805160e0810182526001600160a01b038616600090815260016020908152838220878352905291822054825491928392909190811061058557610585610ec9565b6000918252602080832060069092029091015483526001600160a01b03808a168483015260408085018c9052426060860152908916835260018252808320888452909152812054815460809093019281106105e2576105e2610ec9565b60009182526020808320600460069093020191909101546001600160a01b039081168452338483015260ff871660409485015288168252600181528282208783529052908120548154811061063957610639610ec9565b60009182526020918290208351600690920201908155908201516001820180546001600160a01b039283166001600160a01b031991821617909155604084015160028401556060840151600384015560808401516004840180549184169190921617905560a08301516005909201805460c09094015160ff16600160a01b026001600160a81b031990941692909116919091179190911790555b6040516323b872dd60e01b81526001600160a01b038516906323b872dd9061070390339030908890600401610e80565b600060405180830381600087803b15801561071d57600080fd5b505af1158015610731573d6000803e3d6000fd5b50505050505050505050565b6000818154811061074d57600080fd5b60009182526020909120600690910201805460018201546002830154600384015460048501546005909501549395506001600160a01b03928316949193909291821691811690600160a01b900460ff1687565b600260205281600052604060002081815481106107bc57600080fd5b90600052602060002001600091509150505481565b6001600160a01b03841660009081526001602090815260408083208684529091528120548154829190811061080857610808610ec9565b60009182526020918290206040805160e0810182526006939093029091018054835260018101546001600160a01b03908116948401949094526002810154918301829052600381015460608401526004810154841660808401526005015492831660a0830152600160a01b90920460ff1660c08201529150821480156108a35750826001600160a01b031681602001516001600160a01b0316145b6109245760405162461bcd60e51b815260206004820152604660248201527f4e6f7420726967687420616d6f756e74206f722063757272656e63792073656e60448201527f742c206861766520746f20626520657175616c2063757272656e637920616e6460648201526520707269636560d01b608482015260a4016101f3565b80602001516001600160a01b03166323b872dd333084604001516040518463ffffffff1660e01b815260040161095c93929190610e80565b602060405180830381600087803b15801561097657600080fd5b505af115801561098a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ae9190610de0565b50602081015160a0820151604080840151905163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291169063a9059cbb90604401602060405180830381600087803b158015610a0957600080fd5b505af1158015610a1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a419190610de0565b506001600160a01b038516600090815260016020908152604080832087845290915281205481548291908110610a7957610a79610ec9565b906000526020600020906006020160050160146101000a81548160ff021916908360ff160217905550846001600160a01b03166323b872dd3033876040518463ffffffff1660e01b8152600401610ad293929190610e80565b600060405180830381600087803b158015610aec57600080fd5b505af1158015610b00573d6000803e3d6000fd5b505050505050505050565b6001600160a01b038216600090815260016020908152604080832084845290915281205481548291908110610b4257610b42610ec9565b60009182526020918290206040805160e0810182526006939093029091018054835260018101546001600160a01b03908116948401949094526002810154918301829052600381015460608401526004810154841660808401526005015492831660a0830152600160a01b90920460ff1660c082015291503414610c225760405162461bcd60e51b815260206004820152603160248201527f4e6f7420726967687420616d6f756e7420554e512073656e742c206861766520604482015270746f20626520657175616c20707269636560781b60648201526084016101f3565b8060a001516001600160a01b03166108fc82604001519081150290604051600060405180830381858888f19350505050158015610c63573d6000803e3d6000fd5b506001600160a01b038316600090815260016020908152604080832085845290915281205481548291908110610c9b57610c9b610ec9565b906000526020600020906006020160050160146101000a81548160ff021916908360ff160217905550826001600160a01b03166323b872dd3033856040518463ffffffff1660e01b8152600401610cf493929190610e80565b600060405180830381600087803b158015610d0e57600080fd5b505af1158015610d22573d6000803e3d6000fd5b50505050505050565b600060208284031215610d3d57600080fd5b8135610d4881610edf565b9392505050565b600060208284031215610d6157600080fd5b8151610d4881610edf565b60008060408385031215610d7f57600080fd5b8235610d8a81610edf565b946020939093013593505050565b60008060008060808587031215610dae57600080fd5b8435610db981610edf565b9350602085013592506040850135610dd081610edf565b9396929550929360600135925050565b600060208284031215610df257600080fd5b81518015158114610d4857600080fd5b600060208284031215610e1457600080fd5b5035919050565b600080600080600060a08688031215610e3357600080fd5b853594506020860135610e4581610edf565b93506040860135610e5581610edf565b925060608601359150608086013560ff81168114610e7257600080fd5b809150509295509295909350565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600082821015610ec457634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114610ef457600080fd5b5056fea2646970667358221220fbf33eb1e471c428b86ad6d948b8699fd08a127b923d5fe27ec1e1ec5f59627564736f6c63430008070033
\ No newline at end of file
tests/src/eth/marketplace/MarketPlaceUNQ.soldiffbeforeafterboth1// SPDX-License-Identifier: Apache License2pragma solidity >=0.8.0;34interface IERC721 {5 event Transfer(6 address indexed from,7 address indexed to,8 uint256 indexed tokenId9 );10 event Approval(11 address indexed owner,12 address indexed approved,13 uint256 indexed tokenId14 );1516 function ownerOf(uint256 tokenId) external view returns (address owner);1718 function transferFrom(19 address from,20 address to,21 uint256 tokenId22 ) external;2324 function debug(string memory value) external;25}2627interface IERC20 {28 event Transfer(address indexed from, address indexed to, uint256 value);29 event Approval(30 address indexed owner,31 address indexed spender,32 uint256 value33 );3435 function transfer(address recipient, uint256 amount)36 external37 returns (bool);3839 function transferFrom(40 address sender,41 address recipient,42 uint256 amount43 ) external returns (bool);44}4546contract MarketPlaceUNQ {47 struct Offer {48 uint256 idNFT;49 address currencyCode; //address of currency token, = address(0) for UNQ50 uint256 price;51 uint256 time;52 address idCollection;53 address userAddr;54 uint8 flagActive;55 }56 Offer[] public offers;5758 mapping(address => mapping(uint256 => uint256)) public asks; // [idCollection][idNFT] => idOffer5960 mapping(address => uint256[]) public asksbySeller; // [addressSeller] =>idOffer6162 address owner;6364 constructor() {65 owner = msg.sender;66 }6768 function setowner(address _newOwner) public onlyOwner {69 owner = _newOwner;70 }7172 modifier onlyOwner() {73 require(msg.sender == owner, "Only owner can");74 _;75 }7677 /**78 * Make bids (offers) to sell NFTs79 */80 function setAsk(81 uint256 _price,82 address _currencyCode,83 address _idCollection,84 uint256 _idNFT,85 uint8 _active86 ) public {87 IERC721(_idCollection).debug("ask");88 require(89 IERC721(_idCollection).ownerOf(_idNFT) == msg.sender,90 "Not right token owner"91 );92 uint256 offerID = asks[_idCollection][_idNFT];93 if (offers.length == 0 || offers[offerID].idCollection == address(0)) {94 offers.push(95 Offer(96 _idNFT,97 _currencyCode,98 _price,99 block.timestamp,100 _idCollection,101 msg.sender,102 _active103 )104 );105 asks[_idCollection][_idNFT] = offers.length - 1;106 asksbySeller[msg.sender].push(offers.length - 1);107 }108 //edit existing offer109 else {110 offers[asks[_idCollection][_idNFT]] = Offer(111 offers[asks[_idCollection][_idNFT]].idNFT,112 _currencyCode,113 _price,114 block.timestamp,115 offers[asks[_idCollection][_idNFT]].idCollection,116 msg.sender,117 _active118 );119 }120121 IERC721(_idCollection).transferFrom(msg.sender, address(this), _idNFT);122 }123124 function buy(address _idCollection, uint256 _idNFT) public payable {125 //buing for UNQ like as ethers126 Offer memory offer = offers[asks[_idCollection][_idNFT]];127 //1. check sent amount and send to seller128 require(129 msg.value == offer.price,130 "Not right amount UNQ sent, have to be equal price"131 );132 payable(offer.userAddr).transfer(offer.price);133 // 2. close offer134 offers[asks[_idCollection][_idNFT]].flagActive = 0;135 // 3. transfer NFT to buyer136 IERC721(_idCollection).transferFrom(address(this), msg.sender, _idNFT);137 }138139 function buy(140 address _idCollection,141 uint256 _idNFT,142 address _currencyCode,143 uint256 _amount144 ) public payable {145 Offer memory offer = offers[asks[_idCollection][_idNFT]];146 //1. check sent amount and transfer from buyer to seller147 require(148 offer.price == _amount && offer.currencyCode == _currencyCode,149 "Not right amount or currency sent, have to be equal currency and price"150 );151 // !!! transfer have to be approved to marketplace!152 IERC20(offer.currencyCode).transferFrom(153 msg.sender,154 address(this),155 offer.price156 );157 //to not disclojure buyer's address158 IERC20(offer.currencyCode).transfer(offer.userAddr, offer.price);159 // 2. close offer160 offers[asks[_idCollection][_idNFT]].flagActive = 0;161 // 3. transfer NFT to buyer162 IERC721(_idCollection).transferFrom(address(this), msg.sender, _idNFT);163 }164}1// SPDX-License-Identifier: Apache License2pragma solidity >=0.8.0;34interface IERC721 {5 event Transfer(6 address indexed from,7 address indexed to,8 uint256 indexed tokenId9 );10 event Approval(11 address indexed owner,12 address indexed approved,13 uint256 indexed tokenId14 );1516 function ownerOf(uint256 tokenId) external view returns (address owner);1718 function transferFrom(19 address from,20 address to,21 uint256 tokenId22 ) external;2324 function debug(string memory value) external;25}2627interface IERC20 {28 event Transfer(address indexed from, address indexed to, uint256 value);29 event Approval(30 address indexed owner,31 address indexed spender,32 uint256 value33 );3435 function transfer(address recipient, uint256 amount)36 external37 returns (bool);3839 function transferFrom(40 address sender,41 address recipient,42 uint256 amount43 ) external returns (bool);44}4546contract MarketPlaceUNQ {47 struct Offer {48 uint256 idNFT;49 address currencyCode; //address of currency token, = address(0) for UNQ50 uint256 price;51 uint256 time;52 address idCollection;53 address userAddr;54 uint8 flagActive;55 }56 Offer[] public offers;5758 mapping(address => mapping(uint256 => uint256)) public asks; // [idCollection][idNFT] => idOffer5960 mapping(address => uint256[]) public asksbySeller; // [addressSeller] =>idOffer6162 address owner;6364 constructor() {65 owner = msg.sender;66 }6768 function setowner(address _newOwner) public onlyOwner {69 owner = _newOwner;70 }7172 modifier onlyOwner() {73 require(msg.sender == owner, "Only owner can");74 _;75 }7677 /**78 * Make bids (offers) to sell NFTs79 */80 function setAsk(81 uint256 _price,82 address _currencyCode,83 address _idCollection,84 uint256 _idNFT,85 uint8 _active86 ) public {87 require(88 IERC721(_idCollection).ownerOf(_idNFT) == msg.sender,89 "Not right token owner"90 );91 uint256 offerID = asks[_idCollection][_idNFT];92 if (offers.length == 0 || offers[offerID].idCollection == address(0)) {93 offers.push(94 Offer(95 _idNFT,96 _currencyCode,97 _price,98 block.timestamp,99 _idCollection,100 msg.sender,101 _active102 )103 );104 asks[_idCollection][_idNFT] = offers.length - 1;105 asksbySeller[msg.sender].push(offers.length - 1);106 }107 //edit existing offer108 else {109 offers[asks[_idCollection][_idNFT]] = Offer(110 offers[asks[_idCollection][_idNFT]].idNFT,111 _currencyCode,112 _price,113 block.timestamp,114 offers[asks[_idCollection][_idNFT]].idCollection,115 msg.sender,116 _active117 );118 }119120 IERC721(_idCollection).transferFrom(msg.sender, address(this), _idNFT);121 }122123 function buy(address _idCollection, uint256 _idNFT) public payable {124 //buing for UNQ like as ethers125 Offer memory offer = offers[asks[_idCollection][_idNFT]];126 //1. check sent amount and send to seller127 require(128 msg.value == offer.price,129 "Not right amount UNQ sent, have to be equal price"130 );131 payable(offer.userAddr).transfer(offer.price);132 // 2. close offer133 offers[asks[_idCollection][_idNFT]].flagActive = 0;134 // 3. transfer NFT to buyer135 IERC721(_idCollection).transferFrom(address(this), msg.sender, _idNFT);136 }137138 function buy(139 address _idCollection,140 uint256 _idNFT,141 address _currencyCode,142 uint256 _amount143 ) public payable {144 Offer memory offer = offers[asks[_idCollection][_idNFT]];145 //1. check sent amount and transfer from buyer to seller146 require(147 offer.price == _amount && offer.currencyCode == _currencyCode,148 "Not right amount or currency sent, have to be equal currency and price"149 );150 // !!! transfer have to be approved to marketplace!151 IERC20(offer.currencyCode).transferFrom(152 msg.sender,153 address(this),154 offer.price155 );156 //to not disclojure buyer's address157 IERC20(offer.currencyCode).transfer(offer.userAddr, offer.price);158 // 2. close offer159 offers[asks[_idCollection][_idNFT]].flagActive = 0;160 // 3. transfer NFT to buyer161 IERC721(_idCollection).transferFrom(address(this), msg.sender, _idNFT);162 }163}