
# 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
```


