-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.js
203 lines (188 loc) · 20.5 KB
/
index.js
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
abiERC721 = JSON.parse('[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"_prefixURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addrs","type":"address[]"}],"name":"addToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintItems","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"presaleMintItems","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"reserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"togglePreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleTransferPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]')
abiCHIMPTokenSVG = JSON.parse('[{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenSVG","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]')
abiGB89ERC721 = JSON.parse('[{"inputs":[{"internalType":"address payable","name":"_burnerAddress","type":"address"},{"internalType":"uint256","name":"_mintPrice","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnerAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"curves","outputs":[{"internalType":"uint160","name":"leftPart","type":"uint160"},{"internalType":"uint160","name":"rightPart","type":"uint160"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint160","name":"leftPart","type":"uint160"},{"internalType":"uint160","name":"rightPart","type":"uint160"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_burnerAddress","type":"address"}],"name":"setBurnerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintPrice","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint160","name":"leftPart","type":"uint160"},{"internalType":"uint160","name":"rightPart","type":"uint160"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"updateScreen","outputs":[],"stateMutability":"nonpayable","type":"function"}]')
let provider, signer, contract;
async function connectWallet() {
window.ethereum
.request({method: 'eth_requestAccounts'})
.then(() => {
provider = new ethers.providers.Web3Provider(window.ethereum);
signer = provider.getSigner();
provider.listAccounts().then((accounts) => {
if (accounts.length > 0) {
$("#connectBtn").text('Wallet Connected').removeClass('btn-warning').addClass('btn-success');
onPageLoad();
} else {
console.log("ERROR: Unable to retrieve accounts");
}
});
})
.catch((error) => {
if (error.code === 4001) {
// EIP-1193 userRejectedRequest error
console.log('Please connect to MetaMask.');
} else {
console.error(error);
}
});
};
// Transfer
async function transferERC721() {
transferToAddress = $("#transferERC721ToAddress").val();
if (!ethers.utils.isAddress(transferToAddress)) {
$("#transferERC721ToAddress").removeClass("is-valid").addClass("is-invalid");
return
} else {
$("#transferERC721ToAddress").removeClass("is-invalid").addClass("is-valid");
};
transferTokenId = $("#transferERC721TokenId").val();
if (!$.isNumeric(transferTokenId)) {
return
}
if (!$("#contractAddressSelect").val() == "") {
contractAddress = $("#contractAddressSelect").val()
$("#customContractAddress").removeClass("is-invalid").addClass("is-valid").val("");
} else {
contractAddress = $("#customContractAddress").val();
if (!ethers.utils.isAddress(contractAddress)) {
$("#customContractAddress").removeClass("is-valid").addClass("is-invalid");
return
} else {
$("#customContractAddress").removeClass("is-invalid").addClass("is-valid");
};
}
contract = new ethers.Contract(contractAddress, abiERC721, signer)
from = await signer.getAddress()
contract["safeTransferFrom(address,address,uint256)"](from, transferToAddress, transferTokenId)
.then((f) => console.log(f))
}
async function ownerOf() {
tokenId = $("#ownerOfTokenId").val();
if (!$.isNumeric(tokenId)) {
return
}
if (!$("#contractAddressSelect").val() == "") {
contractAddress = $("#contractAddressSelect").val()
$("#customContractAddress").removeClass("is-invalid").addClass("is-valid").val("");
} else {
contractAddress = $("#customContractAddress").val();
if (!ethers.utils.isAddress(contractAddress)) {
$("#customContractAddress").removeClass("is-valid").addClass("is-invalid");
return
} else {
$("#customContractAddress").removeClass("is-invalid").addClass("is-valid");
};
}
contract = new ethers.Contract(contractAddress, abiERC721, signer)
try {
owner = await contract.ownerOf(tokenId)
} catch(err) {
$("#ownerOfTokenId").removeClass("is-valid").addClass("is-invalid");
$('#ownerOfTokenIdResult').attr('style', 'visibility: hidden;');
return
}
$("#ownerOfTokenId").removeClass("is-invalid").addClass("is-valid");
$('#ownerOfTokenIdResult').text(owner).attr('style', 'visibility: visible;');
}
async function displayCHIMPTokenId() {
tokenId = $("#displayCHIMPTokenId").val();
if (!$.isNumeric(tokenId)) {
return
}
contract = new ethers.Contract("0x1e1628A35C82169F876F97C9CE5B6533895c2B22", abiCHIMPTokenSVG, signer)
let svgString;
try {
svgString = await contract.tokenSVG(tokenId)
} catch(err) {
$("#displayCHIMPTokenId").removeClass("is-valid").addClass("is-invalid");
$('#displayCHIMPimg').attr('style', 'visibility: hidden;');
return
}
$("#displayCHIMPTokenId").removeClass("is-invalid").addClass("is-valid");
const base64EncodedImage = base64EncodeImageContent(svgString)
$('#displayCHIMPimg').attr('src', base64EncodedImage).attr('style', 'visibility: visible;').attr('width', 512).attr('height', 512);
}
async function displayGB89TokenId() {
tokenId = $("#displayGB89TokenId").val();
if ((!$.isNumeric(tokenId)) || (tokenId < 0) || (tokenId > 255)) {
$("#displayGB89TokenId").removeClass("is-valid").addClass("is-invalid");
$('#displayGB89img').attr('style', 'visibility: hidden;');
return
}
contract = new ethers.Contract("0x0e2fbBA88C5E526f5160Af1b9Ad79a20130b2216", abiERC721, signer)
try {
await contract.ownerOf(tokenId)
} catch(err) {
$("#displayGB89TokenId").removeClass("is-valid").addClass("is-invalid");
$('#displayGB89img').attr('style', 'visibility: hidden;');
return
}
let uriString;
try {
uriString = await contract.tokenURI(tokenId)
} catch(err) {
$("#displayGB89TokenId").removeClass("is-valid").addClass("is-invalid");
$('#displayGB89img').attr('style', 'visibility: hidden;');
return
}
$("#displayGB89TokenId").removeClass("is-invalid").addClass("is-valid");
let base64 = uriString.split(',')[1]
const decoded = JSON.parse(atob(base64))
base64 = decoded.image.split(',')[1]
const base64EncodedImage = base64EncodeImageContent(atob(base64))
$('#displayGB89img').attr('src', base64EncodedImage).attr('style', 'visibility: visible;').attr('width', 500).attr('height', 500);
}
async function updateGB89TokenId() {
tokenId = $("#updateGB89TokenId").val();
if ((!$.isNumeric(tokenId)) || (tokenId < 0) || (tokenId > 255)) {
$("#updateGB89TokenId").removeClass("is-valid").addClass("is-invalid");
return
}
contract = new ethers.Contract("0x0e2fbBA88C5E526f5160Af1b9Ad79a20130b2216", abiERC721, signer)
try {
await contract.ownerOf(tokenId)
} catch(err) {
$("#updateGB89TokenId").removeClass("is-valid").addClass("is-invalid");
return
}
updateLeftPart = $("#updateGB89LeftPart").val();
updateRightPart = $("#updateGB89RightPart").val();
if (!$.isNumeric(updateLeftPart) || !$.isNumeric(updateRightPart)) {
return
}
contract = new ethers.Contract(contract.address, abiGB89ERC721, signer)
contract["updateScreen(uint160,uint160,uint256)"](updateLeftPart, updateRightPart, tokenId)
.then((f) => console.log(f))
}
function base64EncodeImageContent(svgString) {
return `data:image/svg+xml;base64,${btoa(svgString)}`
}
// Reload
function onPageLoad() {
if (!window.ethereum) {
$("#connectBtn").text('Sparrow or Metamask not installed').removeClass('btn-warning').addClass('btn-danger');
return;
}
if (!provider) {
connectWallet();
return
}
}
$(document).ready(function () {
$("#transferERC721Button").click(function(){
transferERC721()
});
$("#ownerOfTokenIdButton").click(function(){
ownerOf()
});
$("#displayCHIMPTokenIdButton").click(function(){
displayCHIMPTokenId()
});
$("#displayGB89TokenIdButton").click(function(){
displayGB89TokenId()
});
$("#updateGB89TokenIdButton").click(function(){
updateGB89TokenId()
});
onPageLoad()
});