Last active
October 26, 2021 07:30
-
-
Save web3domainss/fb67eaabcdc37f54397350bccb05dc3a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var web3 = require('@solana/web3.js'); | |
var splToken = require('@solana/spl-token'); | |
var metaplex = require('metaplex/metadatafull.js'); | |
// 1. make a wallet | |
// 2. Airdrop | |
// 3. make a mint account | |
// 4. make a associated account | |
// 5. Mint to associated account | |
// -- Metadata | |
// 6. Create metadata account | |
//var acc1 = 'D5uVdSg6FgVW9ZMHoVHXQLWdw3Kj1xe5J5v7SG4seMps'; | |
var pk = new Uint8Array( [...] ); | |
(async () => { | |
// Connect to cluster | |
var connection = new web3.Connection( | |
web3.clusterApiUrl('devnet'), | |
'confirmed', | |
); | |
// Generate a new wallet keypair and airdrop SOL | |
var fromWallet = web3.Keypair.fromSecretKey(pk); | |
/* | |
var fromWallet = web3.Keypair.generate(); | |
var fromAirdropSignature = await connection.requestAirdrop( | |
fromWallet.publicKey, | |
web3.LAMPORTS_PER_SOL, | |
); | |
//wait for airdrop confirmation | |
var airTrans = await connection.confirmTransaction(fromAirdropSignature); | |
console.log("Got a airdrop. Transaction: " + fromAirdropSignature ); | |
console.log(fromWallet.publicKey) | |
console.log(fromWallet.secretKey) | |
*/ | |
// napravi novi mint account. ako ga zelimo unutar iste transakcije | |
// onda je nužno napraviti prvo account i onda ga inicijalizirati | |
let mintAcc = web3.Keypair.generate(); | |
let rent = await connection.getMinimumBalanceForRentExemption(208, 'confirmed'); | |
//console.log(mintAcc.publicKey.toString()); | |
//splToken.Token.createMint() | |
let instr0 = web3.SystemProgram.createAccount({ | |
fromPubkey: fromWallet.publicKey, | |
newAccountPubkey: mintAcc.publicKey, | |
lamports: rent, | |
space: splToken.MintLayout.span , | |
programId: splToken.TOKEN_PROGRAM_ID | |
}); | |
let instr1 = splToken.Token.createInitMintInstruction( | |
splToken.TOKEN_PROGRAM_ID, | |
mintAcc.publicKey, | |
0, | |
fromWallet.publicKey, | |
fromWallet.publicKey | |
); | |
let [assAccountPK, _n ] = await web3.PublicKey.findProgramAddress( | |
[ | |
fromWallet.publicKey.toBuffer(), | |
splToken.TOKEN_PROGRAM_ID.toBuffer(), | |
mintAcc.publicKey.toBuffer() | |
], | |
splToken.ASSOCIATED_TOKEN_PROGRAM_ID | |
) | |
let instr2 = splToken.Token.createAssociatedTokenAccountInstruction( | |
splToken.ASSOCIATED_TOKEN_PROGRAM_ID, | |
splToken.TOKEN_PROGRAM_ID, | |
mintAcc.publicKey, | |
assAccountPK, | |
fromWallet.publicKey, | |
fromWallet.publicKey | |
); | |
//minting 1 new token to the "fromTokenAccount" account we just returned/created | |
//let instr3 = splToken.Token.createMintToInstruction( | |
// splToken.TOKEN_PROGRAM_ID, | |
// mintAcc.publicKey, | |
// assAccountPK, | |
// fromWallet.publicKey, | |
// [], | |
// 1 | |
// ); | |
var metadataAccount = ''; | |
var maxSupply = undefined; | |
let instr4 = await metaplex.createMetadata( | |
new metaplex.Data({ | |
symbol: '', | |
name: '', | |
uri: '', // size of url for arweave | |
sellerFeeBasisPoints: '', | |
creators: null, | |
}), | |
fromWallet.publicKey.toBase58(), | |
mintAcc.publicKey.toBase58(), | |
fromWallet.publicKey.toBase58(), | |
fromWallet.publicKey.toBase58(), | |
metadataAccount | |
); | |
// Add token transfer instructions to transaction | |
var transaction = new web3.Transaction() | |
.add(instr0) //createAccount | |
.add(instr1) //initMintAccount | |
.add(instr2) //createAssociativeAccount | |
//.add(instr3) //mintTo | |
.add(instr4); //createMetadata | |
transaction.recentBlockhash = (await connection.getRecentBlockhash()).blockhash; | |
// Sign transaction, broadcast, and confirm | |
var signature = await web3.sendAndConfirmTransaction( | |
connection, | |
transaction, | |
[ fromWallet,mintAcc ], | |
{commitment: 'confirmed'}, | |
); | |
console.log('txid', signature); | |
var txid = signature; | |
//check txid is confirmed | |
await connection.getParsedConfirmedTransaction(txid, 'confirmed'); | |
// updateMetadata | |
var tran0 = await metaplex.updateMetadata( | |
new metaplex.Data({ | |
symbol: "", | |
name: "hello", | |
uri: 'https://app.nftmagic.me/api/collection/punkmask/1234', | |
sellerFeeBasisPoints: '', | |
creators: null, | |
}), | |
undefined, | |
undefined, | |
mintAcc.publicKey.toBase58(), | |
fromWallet.publicKey.toBase58(), | |
metadataAccount | |
); | |
// mint to | |
var tran1 = splToken.Token.createMintToInstruction( | |
splToken.TOKEN_PROGRAM_ID, | |
mintAcc.publicKey, | |
assAccountPK, | |
fromWallet.publicKey, | |
[], | |
1 | |
); | |
// createMasterEdition | |
var tran2 = await metaplex.createMasterEdition( | |
maxSupply, | |
mintAcc.publicKey.toBase58(), | |
fromWallet.publicKey, | |
fromWallet.publicKey, | |
fromWallet.publicKey | |
); | |
var tranew = new web3.Transaction() | |
.add(tran0) //updateMetadata | |
.add(tran1) //creatMintTo | |
.add(tran2) //createMasterEditor | |
var sim = await connection.simulateTransaction( | |
tranew, | |
[ fromWallet, mintAcc ] | |
); | |
console.log("Log response : ", sim.value.logs); | |
// Sign transaction, broadcast, and confirm | |
var signaturenew = await web3.sendAndConfirmTransaction( | |
connection, | |
tranew, | |
[fromWallet], | |
{commitment: 'confirmed'}, | |
); | |
console.log('txidnew', signaturenew); | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment