anchor deploy --provider.cluster devnet
anchor idl init -f target/idl/mixture_machine.json 7TzTuLobYxcPJw62EMEq93C72vBd8tmRP8CbQ7e4tS3z

https://project-serum.github.io/anchor/cli/commands.html#idl-upgrade

solana logs 7TzTuLobYxcPJw62EMEq93C72vBd8tmRP8CbQ7e4tS3z
curl <https://api.devnet.solana.com/> -X POST -H "Content-Type: application/json" -d '
  {
    "jsonrpc": "2.0",
    "id": 1,
    "method": "getTokenAccountsByOwner",
    "params": [
      "5qboT7jgnuWNQvSShNKegNbKwzAGkJohhYdZcHdbqUxW", // 프로그램 PDA
      {
        "programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
      },
      {
        "encoding": "jsonParsed"
      }
    ]
  }
'

CLI에서 위 명령어 입력하면, json 형식으로, 해당 프로그램 PDA가 소유하고 있는 자식 NFT들의 mint account와 ata 주소들을 뱉어냄.

curl <https://api.devnet.solana.com/> -X POST -H "Content-Type: application/json" -d '
  {
    "jsonrpc": "2.0",
    "id": 1,
    "method": "getTokenAccountsByOwner",
    "params": [
      "5qboT7jgnuWNQvSShNKegNbKwzAGkJohhYdZcHdbqUxW", // 프로그램 PDA
      {
        "programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
      },
      {
        "encoding": "jsonParsed"
      }
    ]
  }
'

javascript에선 대충 요거 참고

requests.post()

const web3 = require("@solana/web3.js");
(async () => {
  const solana = new web3.Connection("<https://api.devnet.solana.com/>");
  const accountPublicKey = new web3.PublicKey(
    "Program PDA"
  );
  const tokenProgram = new web3.PublicKey(
    "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
  );
  console.log(
    await solana.getTokenAccountsByOwner(accountPublicKey, {
      programId: tokenProgram,
    })
  );
})();