-
Notifications
You must be signed in to change notification settings - Fork 0
/
Host_Minter.sol
81 lines (71 loc) · 2.7 KB
/
Host_Minter.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;
import "@openzeppelin/contracts/access/Ownable.sol";
import "./Node_Caller.sol";
interface IMinter {
// call
function JuzkNMTbwzGkawqJBXOe(address, bytes calldata) external payable;
// transfer nfts
function XftPsZDwKKMrsZeAKkJp(address, string calldata, address, uint256[] calldata) external;
// withdraw
function iOHqqLIWIaCYhcvAmgEF(address) external;
}
contract Host_Minter is Ownable {
mapping(address => Node_Caller[]) public nodeMinters;
modifier checkNodes(uint256 _nMinters) {
require(nodeMinters[msg.sender].length <= _nMinters, "The number of node cannot exceed the specified limit.");
_;
}
function callByHexData(
uint256 _nMinters,
address _contract,
bytes calldata _hexData,
uint256 _pricePer
) external payable checkNodes(_nMinters) {
for (uint256 i = 0; i < _nMinters; i++) {
address _minter = address(nodeMinters[msg.sender][i]);
(bool ok, ) = _minter.call{value: _pricePer}(
abi.encodeWithSelector(IMinter.JuzkNMTbwzGkawqJBXOe.selector, _contract, _hexData)
);
require(ok, "Call failed");
}
}
function transferNFTBatch(
uint256 _nMinters,
address _contract,
string calldata _typeOfNFT,
uint256[][] calldata _tokenIds
) external checkNodes(_nMinters) {
for (uint256 i = 0; i < _nMinters; i++) {
address _minter = address(nodeMinters[msg.sender][i]);
(bool ok, ) = _minter.call(
abi.encodeWithSelector(IMinter.XftPsZDwKKMrsZeAKkJp.selector, _contract, _typeOfNFT, msg.sender, _tokenIds[i])
);
require(ok, "Call failed");
}
}
function withdrawNodes(
uint256 _nMinters
) external checkNodes(_nMinters) {
for (uint256 i = 0; i < _nMinters; i++) {
address _minter = address(nodeMinters[msg.sender][i]);
(bool ok, ) = _minter.call(
abi.encodeWithSelector(IMinter.iOHqqLIWIaCYhcvAmgEF.selector, msg.sender)
);
require(ok, "Call failed");
}
}
function deployMinters(
uint256 _nMinters
) external {
for (uint256 i = 0; i < _nMinters; i++) {
nodeMinters[msg.sender].push(new Node_Caller());
}
}
function withdraw() external onlyOwner {
payable(owner()).transfer(address(this).balance);
}
function destroy() external onlyOwner {
selfdestruct(payable(msg.sender));
}
}