29
loading...
This website collects cookies to deliver better user experience
pragma solidity ^0.8.0;
import "./ERC721Tradable.sol";
/**
* @title GitNFT
* GitNFT - a contract for code GitNFTs.
*/
contract GitNFT is ERC721Tradable {
uint256 public nextTokenId;
address public admin;
constructor(address _proxyRegistryAddress)
public
ERC721Tradable("GitNFT", "GitNFT", _proxyRegistryAddress)
{
admin = msg.sender;
}
// only our wallet should be able to mint
function mint(address to) external onlyOwner {
_safeMint(to, nextTokenId);
nextTokenId++;
}
function baseTokenURI() public pure override returns (string memory) {
return "https://www.gitgallery.com/tokenid/";
}
}
const NFT = artifacts.require("GitNFT");
const proxyRegistryAddress = process.env.OWNER_ADDRESS
module.exports = async function (deployer, _network, accounts) {
await deployer.deploy(NFT,proxyRegistryAddress, {gas: 5000000});
const nft = await NFT.deployed();
};
{
repository(owner: "OWNER", name: "NAME") {
object(expression: "COMMIT_ID") {
... on Commit {
author{
name
user{
login
}
}
}
}
}
}
def web3_mint(userAddress: str):
"""
Purpose:
mint a token for user on blockchain
Args:
userAddress - the user to mint for
Returns:
hash - txn of mint
tokenid - token minted
"""
nonce = w3.eth.get_transaction_count(PUBLIC_KEY)
# Create the contract function
mint_txn = CODE_NFT.functions.mint(userAddress).buildTransaction(
{
"chainId": CHAIN_ID,
"gas": 10000000,
"gasPrice": w3.toWei("1", "gwei"),
"nonce": nonce,
}
)
signed_txn = w3.eth.account.sign_transaction(mint_txn, private_key=PRIVATE_KEY)
w3.eth.send_raw_transaction(signed_txn.rawTransaction)
hash = w3.toHex(w3.keccak(signed_txn.rawTransaction))
receipt = w3.eth.wait_for_transaction_receipt(hash)
hex_tokenid = receipt["logs"][0]["topics"][3].hex() # this is token id in hex
# convert from hex to decmial
tokenid = int(hex_tokenid, 16)
logging.info(f"Got tokenid: {tokenid}")
return hash, tokenid
www.gitgallery.com/gallery/{USER_NAME}/minted
@application.route("/gallery/<user>/minted")
def minted(user):
"""
Purpose:
load gallery page
Args:
N/A
Returns:
html - gallery html
"""
if "profile" in session:
curr_user = session["profile"]
else:
curr_user = None
# check if user exists...
userdata = users.get_item(Key={"username": user})
if not "Item" in userdata:
logging.error(f"No such user {user}")
return redirect(f"/")
user_metadata = userdata["Item"]
# get minted items
minted_items = get_minted_items(user)
return render_template(
"gallery.html",
userinfo=curr_user,
minted_items=minted_items,
user=user,
user_metadata=user_metadata,
)
async function safe_mint(data) {
// console.log("safe mint called")
let userAddress = ""
try {
userAddress = await walletSigner.getAddress()
} catch (error) {
alert("Metamask not detected")
console.log(error)
return
}
let username = data["username"]
let ver_url = data["verify_url"]
let ver_date = data["status_json"]["date"]
// Commint
const base_message = "Signed on GitGallery\n\n" + username + " " + ver_date + "\n " + ver_url
const signature = await walletSigner.signMessage(base_message)
var mintObj = {}
mintObj["verify_json"] = data
mintObj["signature"] = signature
mintObj["userAddress"] = userAddress
var mintString = JSON.stringify(mintObj)
$("body").css("opacity", ".3");
$("#load_spinner").toggle();
$.ajax({
type: "POST",
url: "/mint_token",
dataType: "json",
data: mintString,
contentType: "application/json",
success: function (data) {
console.log("mint returned")
console.log(data)
$("#load_spinner").toggle();
$("body").css("opacity", "1");
//check for error
if ('error' in data) {
alert(data["error"]);
return -1
}
alert("Mint Successful")
//passed? reload page?
location.reload()
},
error: function (xhr, textStatus, thrownError, data) {
alert("Error: " + thrownError);
$("body").css("opacity", "1");
$("#load_spinner").toggle();
}
})
}