167 lines
5.8 KiB
Markdown
167 lines
5.8 KiB
Markdown
|
|
# Local scripts for Solana actions
|
|
|
|
This directory contains scripts for performing actions on the Solana blockchain.
|
|
|
|
|
|
## Docker
|
|
|
|
```bash
|
|
cd solana
|
|
|
|
# Build the image
|
|
docker build --tag solana:local .
|
|
|
|
# Launch the image
|
|
docker run -ti solana:local /bin/bash
|
|
```
|
|
|
|
## Commands
|
|
|
|
### Setup
|
|
|
|
```
|
|
# Vérifier les versions
|
|
solana --version
|
|
spl-token --version
|
|
|
|
# Configurer devnet
|
|
solana config set --url https://api.devnet.solana.com
|
|
|
|
# Créer un wallet
|
|
solana-keygen new --no-bip39-passphrase --outfile ~/.config/solana/id.json
|
|
solana config set --keypair ~/.config/solana/id.json
|
|
|
|
# Vérifier adresse et balance
|
|
solana address
|
|
solana balance
|
|
|
|
# Airdrop SOL sur devnet (2 SOL max par jour)
|
|
solana airdrop 2
|
|
|
|
```
|
|
|
|
### Créer le token
|
|
|
|
```bash
|
|
root@d8bdd9efc445:/solana-dev# spl-token create-token --program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb --enable-metadata --decimals 6
|
|
root@d8bdd9efc445:/solana-dev# spl-token initialize-metadata <TOKEN_ADDRESS> "<Name>" "<Symbol>" "https://gateway.pinata.cloud/ipfs/<PINATA_CID>
|
|
root@d8bdd9efc445:/solana-dev# spl-token create-account <TOKEN_ADDRESS>
|
|
root@d8bdd9efc445:/solana-dev# spl-token mint <TOKEN_ADDRESS> 1000000000
|
|
root@d8bdd9efc445:/solana-dev# spl-token accounts
|
|
root@d8bdd9efc445:/solana-dev# spl-token authorize <TOKEN_ADDRESS> mint --disable
|
|
root@d8bdd9efc445:/solana-dev# spl-token accounts
|
|
|
|
```
|
|
|
|
|
|
Exemple:
|
|
```bash
|
|
|
|
# Créer ton premier token !
|
|
root@d8bdd9efc445:/solana-dev# spl-token create-token --program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb --enable-metadata --decimals 6
|
|
Creating token HnaHN6Xjvb1Kvm9y8VLYDtx2sXQseXxtaRdymBtGcdRM under program TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb
|
|
To initialize metadata inside the mint, please run `spl-token initialize-metadata HnaHN6Xjvb1Kvm9y8VLYDtx2sXQseXxtaRdymBtGcdRM <YOUR_TOKEN_NAME> <YOUR_TOKEN_SYMBOL> <YOUR_TOKEN_URI>`, and sign with the mint authority.
|
|
|
|
Address: HnaHN6Xjvb1Kvm9y8VLYDtx2sXQseXxtaRdymBtGcdRM
|
|
Decimals: 9
|
|
|
|
Signature: 2hJ8f1D62Xs784w1yEyyv6QniWKsCUmU7iT2zfCPf2omxS1BJaewubLGrGMyKodmsZVrW2v6ySAoRipzUDfgSkV6
|
|
|
|
root@d8bdd9efc445:/solana-dev# spl-token initialize-metadata HnaHN6Xjvb1Kvm9y8VLYDtx2sXQseXxtaRdymBtGcdRM "PSIT" "PSIT" "https://gateway.pinata.cloud/ipfs/bafkreifdhduevz3xi6hkgy7fec42flit73n2mo3itihgbiaccvgfbgiuly"
|
|
|
|
Signature: 2QwbjKCg7KVQHRthV3zRoYNCm3m9N1RFBPjWApFjh5wV7HjDysuw6jLL4FDAEZw73wZaQa7uV48hhbFRNu1WhDyN
|
|
|
|
root@d8bdd9efc445:/solana-dev# spl-token create-account HnaHN6Xjvb1Kvm9y8VLYDtx2sXQseXxtaRdymBtGcdRM
|
|
Creating account Bkzb9daQK6urCH8Ff3SoYe1Lk9sECoCr1i85kEEPSkhz
|
|
|
|
Signature: vpYs1RFtAZon4q3WeLaCwbjQVTua6SgsLfjp8biJit3EaYEeM2gXzcfW7VQyPb742ffGFnCdwGFhJjdPTietp5Z
|
|
|
|
root@d8bdd9efc445:/solana-dev# spl-token mint HnaHN6Xjvb1Kvm9y8VLYDtx2sXQseXxtaRdymBtGcdRM 1000000000
|
|
Minting 1000000000 tokens
|
|
Token: HnaHN6Xjvb1Kvm9y8VLYDtx2sXQseXxtaRdymBtGcdRM
|
|
Recipient: Bkzb9daQK6urCH8Ff3SoYe1Lk9sECoCr1i85kEEPSkhz
|
|
|
|
Signature: 2Pz5ed7cAQpEg3CcfxZKCyAbwX7QoN1Ud6PAa9ZrddhtTcbqNUs4CZYWf2d1rkeAcmbtnAnygkaRZWTy99fXPAfV
|
|
|
|
root@d8bdd9efc445:/solana-dev# spl-token accounts
|
|
Token Balance
|
|
--------------------------------------------------------
|
|
4mookDy5M6wpzyausGhfw9EeTPpBsp9vwefb76qKBscW 100000000
|
|
HnaHN6Xjvb1Kvm9y8VLYDtx2sXQseXxtaRdymBtGcdRM 1000000000
|
|
|
|
root@d8bdd9efc445:/solana-dev# spl-token authorize HnaHN6Xjvb1Kvm9y8VLYDtx2sXQseXxtaRdymBtGcdRM mint --disable
|
|
Updating HnaHN6Xjvb1Kvm9y8VLYDtx2sXQseXxtaRdymBtGcdRM
|
|
Current mint: 7Q9y2AUAJHSzjedDZoK3XMKuGNN6GkFTbNX6J8je4UXi
|
|
New mint: disabled
|
|
|
|
Signature: 5pZL61zAP5k3nhEUzwzd9BbddotyFA6mDBG2yY3fpxK7DzaD7wpPGVcA2kiutUA3F66c9RZgSgwSSui9ZGNhZrWz
|
|
|
|
root@d8bdd9efc445:/solana-dev# spl-token accounts
|
|
Token Balance
|
|
--------------------------------------------------------
|
|
4mookDy5M6wpzyausGhfw9EeTPpBsp9vwefb76qKBscW 100000000
|
|
HnaHN6Xjvb1Kvm9y8VLYDtx2sXQseXxtaRdymBtGcdRM 1000000000
|
|
|
|
|
|
```
|
|
|
|
### Voir le token sur la blockchain
|
|
https://explorer.solana.com/address/HnaHN6Xjvb1Kvm9y8VLYDtx2sXQseXxtaRdymBtGcdRM?cluster=devnet
|
|
|
|
### Vanity mint
|
|
```bash
|
|
# Cherche une adresse qui commence par "PSIT"
|
|
# L'option --starts-with prend le format PREFIX:NOMBRE_D_OCCURENCES
|
|
solana-keygen grind --starts-with PLEXUS:1
|
|
# Utilise le programme Token-2022 et ton fichier forgé
|
|
spl-token create-token --program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb --enable-metadata PSIT7xW...json
|
|
```
|
|
|
|
## NFT
|
|
|
|
### Créer le parent
|
|
```bash
|
|
# 1. Créer le token avec l'extension "Group"
|
|
# On utilise --enable-group pour qu'il puisse être un parent
|
|
spl-token create-token --program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb \
|
|
--enable-metadata \
|
|
--enable-group \
|
|
--decimals 0
|
|
|
|
# 2. Initialiser les metadata de la collection
|
|
spl-token initialize-metadata <ADRESSE_PARENT> "Ma Collection PSIT" "PSIT" "https://ipfs.../collection.json"
|
|
|
|
# 3. Initialiser le groupe (indiquer que ce NFT peut avoir 100 membres)
|
|
# Max-size 100 n'est pas obligatoire mais conseillé
|
|
spl-token initialize-group <ADRESSE_PARENT> <ADRESSE_PARENT> 100
|
|
|
|
# 4. Créer votre exemplaire unique et bloquer la création
|
|
spl-token create-account <ADRESSE_PARENT>
|
|
spl-token mint <ADRESSE_PARENT> 1
|
|
spl-token authorize <ADRESSE_PARENT> mint --disable
|
|
```
|
|
|
|
### Créer les enfants
|
|
```bash
|
|
# 1. Créer le token avec l'extension "Group Member"
|
|
spl-token create-token --program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb \
|
|
--enable-metadata \
|
|
--enable-group-member \
|
|
--decimals 0
|
|
|
|
# 2. Initialiser ses metadata propres
|
|
spl-token initialize-metadata <ADRESSE_NFT_1> "PSIT #1" "PSIT" "https://ipfs.../1.json"
|
|
|
|
# 3. LIER ce NFT au parent
|
|
# On indique que ce NFT appartient au groupe <ADRESSE_PARENT>
|
|
spl-token initialize-group-member <ADRESSE_NFT_1> <ADRESSE_PARENT> <ADRESSE_PARENT>
|
|
|
|
# 4. Créer l'exemplaire et bloquer
|
|
spl-token create-account <ADRESSE_NFT_1>
|
|
spl-token mint <ADRESSE_NFT_1> 1
|
|
spl-token authorize <ADRESSE_NFT_1> mint --disable
|
|
```
|
|
|
|
|