/**
*Submitted for verification at Etherscan.io on 2021-03-30
*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract CheckoutManager {
address public admin;
address payable public vaultWallet;
event BuyItems(string orderId, string buyerId, address buyer, string[] itemIds, uint256[] amounts);
event BuyAuctionItem(string orderId, string buyerId, address buyer, string editionId, string itemId, address payoutWallet);
modifier onlyAdmin() {
require(msg.sender == admin, "Not admin");
_;
}
constructor(address payable _vaultWallet) {
require(_vaultWallet != address(0), "Invalid vault address");
admin = msg.sender;
vaultWallet = _vaultWallet;
}
function buyItems(string calldata orderId, string calldata buyerId, string[] calldata itemIds, uint256[] calldata amounts) external payable {
require(msg.value > 0, "Wrong ETH value!");
require(itemIds.length > 0, "No items");
require(itemIds.length == amounts.length, "Items and amounts length should be the same");
vaultWallet.transfer(msg.value);
emit BuyItems(orderId, buyerId, msg.sender, itemIds, amounts);
}
function buyAuctionItem(string calldata orderId, string calldata buyerId, string calldata editionId, string calldata itemId, address payable payoutWallet) external payable {
require(msg.value > 0, "Wrong ETH value!");
uint256 payout = msg.value * 9500 / 10000;
uint256 vault = msg.value - payout;
payoutWallet.transfer(payout);
vaultWallet.transfer(vault);
emit BuyAuctionItem(orderId, buyerId, msg.sender, editionId, itemId, payoutWallet);
}
function setAdmin(address _newAdmin) external onlyAdmin {
require(_newAdmin != address(0), "Invalid address");
admin = _newAdmin;
}
function setVaultAddress(address payable _vaultWallet) public onlyAdmin {
require(_vaultWallet != address(0), "Invalid vault address");
vaultWallet = _vaultWallet;
}
}
{
"compilationTarget": {
"contracts/CheckoutManager.sol": "CheckoutManager"
},
"evmVersion": "istanbul",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": []
}
[{"inputs":[{"internalType":"address payable","name":"_vaultWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"orderId","type":"string"},{"indexed":false,"internalType":"string","name":"buyerId","type":"string"},{"indexed":false,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"string","name":"editionId","type":"string"},{"indexed":false,"internalType":"string","name":"itemId","type":"string"},{"indexed":false,"internalType":"address","name":"payoutWallet","type":"address"}],"name":"BuyAuctionItem","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"orderId","type":"string"},{"indexed":false,"internalType":"string","name":"buyerId","type":"string"},{"indexed":false,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"string[]","name":"itemIds","type":"string[]"},{"indexed":false,"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"BuyItems","type":"event"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"orderId","type":"string"},{"internalType":"string","name":"buyerId","type":"string"},{"internalType":"string","name":"editionId","type":"string"},{"internalType":"string","name":"itemId","type":"string"},{"internalType":"address payable","name":"payoutWallet","type":"address"}],"name":"buyAuctionItem","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"string","name":"orderId","type":"string"},{"internalType":"string","name":"buyerId","type":"string"},{"internalType":"string[]","name":"itemIds","type":"string[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"buyItems","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAdmin","type":"address"}],"name":"setAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_vaultWallet","type":"address"}],"name":"setVaultAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vaultWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"}]