Skip to content

Instantly share code, notes, and snippets.

@web3domainss
Last active October 26, 2021 07:30
Show Gist options
  • Save web3domainss/fb67eaabcdc37f54397350bccb05dc3a to your computer and use it in GitHub Desktop.
Save web3domainss/fb67eaabcdc37f54397350bccb05dc3a to your computer and use it in GitHub Desktop.
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