export type BlockassetBlaze = {
  version: '0.0.1';
  name: 'blockasset_blaze';
  instructions: [
    {
      name: 'redeemEntrants';
      accounts: [
        {
          name: 'blaze';
          isMut: true;
          isSigner: false;
        },
        {
          name: 'entrants';
          isMut: true;
          isSigner: false;
        },
        {
          name: 'signer';
          isMut: true;
          isSigner: true;
        },
        {
          name: 'systemProgram';
          isMut: false;
          isSigner: false;
        },
        {
          name: 'tokenProgram';
          isMut: false;
          isSigner: false;
        }
      ];
      args: [
        {
          name: 'count';
          type: 'u32';
        }
      ];
    },
    {
      name: 'claimPrize';
      accounts: [
        {
          name: 'blaze';
          isMut: true;
          isSigner: false;
        },
        {
          name: 'blazePrizeMintTokenAccount';
          isMut: true;
          isSigner: false;
        },
        {
          name: 'winner';
          isMut: true;
          isSigner: true;
        },
        {
          name: 'winnerPrizeMintTokenAccount';
          isMut: true;
          isSigner: false;
        },
        {
          name: 'tokenProgram';
          isMut: false;
          isSigner: false;
        }
      ];
      args: [];
    },
    {
      name: 'closeBlaze';
      accounts: [
        {
          name: 'blaze';
          isMut: true;
          isSigner: false;
        },
        {
          name: 'project';
          isMut: true;
          isSigner: false;
        },
        {
          name: 'entrants';
          isMut: true;
          isSigner: false;
        },
        {
          name: 'blazePrizeMintTokenAccount';
          isMut: true;
          isSigner: false;
        },
        {
          name: 'authority';
          isMut: true;
          isSigner: true;
        },
        {
          name: 'authorityPrizeMintTokenAccount';
          isMut: true;
          isSigner: false;
        },
        {
          name: 'tokenProgram';
          isMut: false;
          isSigner: false;
        }
      ];
      args: [];
    },
    {
      name: 'initIdentifier';
      accounts: [
        {
          name: 'identifier';
          isMut: true;
          isSigner: false;
        },
        {
          name: 'payer';
          isMut: true;
          isSigner: true;
        },
        {
          name: 'systemProgram';
          isMut: false;
          isSigner: false;
        }
      ];
      args: [];
    },
    {
      name: 'initBlaze';
      accounts: [
        {
          name: 'blaze';
          isMut: true;
          isSigner: false;
        },
        {
          name: 'project';
          isMut: true;
          isSigner: false;
        },
        {
          name: 'projectWallet';
          isMut: true;
          isSigner: false;
        },
        {
          name: 'entrants';
          isMut: true;
          isSigner: false;
        },
        {
          name: 'identifier';
          isMut: true;
          isSigner: false;
        },
        {
          name: 'blazePrizeMintTokenAccount';
          isMut: true;
          isSigner: false;
        },
        {
          name: 'authority';
          isMut: true;
          isSigner: true;
        },
        {
          name: 'authorityPrizeMintTokenAccount';
          isMut: true;
          isSigner: false;
        },
        {
          name: 'systemProgram';
          isMut: false;
          isSigner: false;
        },
        {
          name: 'tokenProgram';
          isMut: false;
          isSigner: false;
        },
        {
          name: 'rent';
          isMut: false;
          isSigner: false;
        }
      ];
      args: [
        {
          name: 'ix';
          type: {
            defined: 'InitBlazeIx';
          };
        }
      ];
    },
    {
      name: 'resolveBlaze';
      accounts: [
        {
          name: 'blaze';
          isMut: true;
          isSigner: false;
        },
        {
          name: 'recentBlockhashes';
          isMut: false;
          isSigner: false;
        },
        {
          name: 'entrants';
          isMut: false;
          isSigner: false;
        },
        {
          name: 'tokenProgram';
          isMut: false;
          isSigner: false;
        }
      ];
      args: [];
    },
    {
      name: 'updateBlaze';
      accounts: [
        {
          name: 'blaze';
          isMut: true;
          isSigner: false;
        },
        {
          name: 'project';
          isMut: true;
          isSigner: false;
        },
        {
          name: 'authority';
          isMut: true;
          isSigner: true;
        }
      ];
      args: [
        {
          name: 'ix';
          type: {
            defined: 'UpdateBlazeIx';
          };
        }
      ];
    }
  ];
  accounts: [
    {
      name: 'blaze';
      type: {
        kind: 'struct';
        fields: [
          {
            name: 'bump';
            type: 'u8';
          },
          {
            name: 'identifier';
            type: 'u64';
          },
          {
            name: 'entrants';
            type: 'publicKey';
          },
          {
            name: 'project';
            type: 'publicKey';
          },
          {
            name: 'prizeMint';
            type: 'publicKey';
          },
          {
            name: 'tokenMint';
            type: {
              option: 'publicKey';
            };
          },
          {
            name: 'tokenAccount';
            type: {
              option: 'publicKey';
            };
          },
          {
            name: 'treasury';
            type: {
              option: 'publicKey';
            };
          },
          {
            name: 'burnRate';
            type: 'u8';
          },
          {
            name: 'entrantFee';
            type: 'u64';
          },
          {
            name: 'start';
            type: 'i64';
          },
          {
            name: 'end';
            type: 'i64';
          },
          {
            name: 'winner';
            type: 'publicKey';
          },
          {
            name: 'prizeClaimed';
            type: 'bool';
          },
          {
            name: 'maxEntrantsPerWalletRate';
            type: 'u8';
          },
          {
            name: 'category';
            type: {
              option: 'string';
            };
          }
        ];
      };
    },
    {
      name: 'identifier';
      type: {
        kind: 'struct';
        fields: [
          {
            name: 'bump';
            type: 'u8';
          },
          {
            name: 'count';
            type: 'u64';
          }
        ];
      };
    },
    {
      name: 'entrants';
      type: {
        kind: 'struct';
        fields: [
          {
            name: 'total';
            type: 'u32';
          },
          {
            name: 'max';
            type: 'u32';
          }
        ];
      };
    }
  ];
  types: [
    {
      name: 'InitBlazeIx';
      type: {
        kind: 'struct';
        fields: [
          {
            name: 'prizeMint';
            type: 'publicKey';
          },
          {
            name: 'tokenMint';
            type: {
              option: 'publicKey';
            };
          },
          {
            name: 'tokenAccount';
            type: {
              option: 'publicKey';
            };
          },
          {
            name: 'treasury';
            type: {
              option: 'publicKey';
            };
          },
          {
            name: 'burnRate';
            type: {
              option: 'u8';
            };
          },
          {
            name: 'entrantFee';
            type: 'u64';
          },
          {
            name: 'maxEntrants';
            type: 'u32';
          },
          {
            name: 'start';
            type: 'i64';
          },
          {
            name: 'end';
            type: 'i64';
          },
          {
            name: 'maxEntrantsPerWalletRate';
            type: {
              option: 'u8';
            };
          },
          {
            name: 'category';
            type: {
              option: 'string';
            };
          }
        ];
      };
    },
    {
      name: 'UpdateBlazeIx';
      type: {
        kind: 'struct';
        fields: [
          {
            name: 'tokenMint';
            type: {
              option: 'publicKey';
            };
          },
          {
            name: 'tokenAccount';
            type: {
              option: 'publicKey';
            };
          },
          {
            name: 'treasury';
            type: {
              option: 'publicKey';
            };
          },
          {
            name: 'entrantFee';
            type: 'u64';
          },
          {
            name: 'burnRate';
            type: {
              option: 'u8';
            };
          },
          {
            name: 'start';
            type: 'i64';
          },
          {
            name: 'end';
            type: 'i64';
          },
          {
            name: 'maxEntrantsPerWalletRate';
            type: {
              option: 'u8';
            };
          },
          {
            name: 'category';
            type: {
              option: 'string';
            };
          }
        ];
      };
    }
  ];
  errors: [
    {
      code: 6000;
      name: 'InvalidProjectAuthority';
      msg: 'Invalid project authority';
    },
    {
      code: 6001;
      name: 'InvalidBlaze';
      msg: 'Invalid blaze';
    },
    {
      code: 6002;
      name: 'InvalidBlazePrizeMintTokenAccount';
      msg: 'Invalid blaze prize mint token account';
    },
    {
      code: 6003;
      name: 'InvalidUserPrizeMintTokenAccount';
      msg: 'Invalid user prize mint token account';
    },
    {
      code: 6004;
      name: 'InvalidUserTokenAccount';
      msg: 'Invalid user token account';
    },
    {
      code: 6005;
      name: 'ActiveBlaze';
      msg: 'Active blaze';
    },
    {
      code: 6006;
      name: 'BlazeNotStarted';
      msg: 'Blaze not started yet';
    },
    {
      code: 6007;
      name: 'BlazeEnded';
      msg: 'Blaze ended';
    },
    {
      code: 6008;
      name: 'ResolvedBlaze';
      msg: 'Resolved blaze';
    },
    {
      code: 6009;
      name: 'InvalidStartEnd';
      msg: 'Invalid start and end';
    },
    {
      code: 6010;
      name: 'NotEnoughEntrantsLeft';
      msg: 'Not enough entries left in the blaze';
    },
    {
      code: 6011;
      name: 'EntrantsAccountTooSmallForMaxEntrants';
      msg: 'Entrants account too small for max entrants';
    },
    {
      code: 6012;
      name: 'InvalidCalculation';
      msg: 'Invalid calculation';
    },
    {
      code: 6013;
      name: 'UserIsNotTheWinner';
      msg: 'You are not the winner';
    },
    {
      code: 6014;
      name: 'InvalidEntrants';
      msg: 'Invalid entrants';
    },
    {
      code: 6015;
      name: 'PrizeNotClaimedYet';
      msg: 'Prize not claimed yet';
    },
    {
      code: 6016;
      name: 'InvalidTokenMint';
      msg: 'Invalid token mint';
    },
    {
      code: 6017;
      name: 'MaxPurchaseLimitReached';
      msg: 'You have reached your 20% burn entry limit';
    },
    {
      code: 6018;
      name: 'PermissionDenied';
      msg: 'Permission denied';
    },
    {
      code: 6019;
      name: 'InvalidProject';
      msg: 'Invalid project';
    },
    {
      code: 6020;
      name: 'InvalidTokenAccount';
      msg: 'Invalid token or treasury account';
    }
  ];
};

export const IDL: BlockassetBlaze = {
  version: '0.0.1',
  name: 'blockasset_blaze',
  instructions: [
    {
      name: 'redeemEntrants',
      accounts: [
        {
          name: 'blaze',
          isMut: true,
          isSigner: false
        },
        {
          name: 'entrants',
          isMut: true,
          isSigner: false
        },
        {
          name: 'signer',
          isMut: true,
          isSigner: true
        },
        {
          name: 'systemProgram',
          isMut: false,
          isSigner: false
        },
        {
          name: 'tokenProgram',
          isMut: false,
          isSigner: false
        }
      ],
      args: [
        {
          name: 'count',
          type: 'u32'
        }
      ]
    },
    {
      name: 'claimPrize',
      accounts: [
        {
          name: 'blaze',
          isMut: true,
          isSigner: false
        },
        {
          name: 'blazePrizeMintTokenAccount',
          isMut: true,
          isSigner: false
        },
        {
          name: 'winner',
          isMut: true,
          isSigner: true
        },
        {
          name: 'winnerPrizeMintTokenAccount',
          isMut: true,
          isSigner: false
        },
        {
          name: 'tokenProgram',
          isMut: false,
          isSigner: false
        }
      ],
      args: []
    },
    {
      name: 'closeBlaze',
      accounts: [
        {
          name: 'blaze',
          isMut: true,
          isSigner: false
        },
        {
          name: 'project',
          isMut: true,
          isSigner: false
        },
        {
          name: 'entrants',
          isMut: true,
          isSigner: false
        },
        {
          name: 'blazePrizeMintTokenAccount',
          isMut: true,
          isSigner: false
        },
        {
          name: 'authority',
          isMut: true,
          isSigner: true
        },
        {
          name: 'authorityPrizeMintTokenAccount',
          isMut: true,
          isSigner: false
        },
        {
          name: 'tokenProgram',
          isMut: false,
          isSigner: false
        }
      ],
      args: []
    },
    {
      name: 'initIdentifier',
      accounts: [
        {
          name: 'identifier',
          isMut: true,
          isSigner: false
        },
        {
          name: 'payer',
          isMut: true,
          isSigner: true
        },
        {
          name: 'systemProgram',
          isMut: false,
          isSigner: false
        }
      ],
      args: []
    },
    {
      name: 'initBlaze',
      accounts: [
        {
          name: 'blaze',
          isMut: true,
          isSigner: false
        },
        {
          name: 'project',
          isMut: true,
          isSigner: false
        },
        {
          name: 'projectWallet',
          isMut: true,
          isSigner: false
        },
        {
          name: 'entrants',
          isMut: true,
          isSigner: false
        },
        {
          name: 'identifier',
          isMut: true,
          isSigner: false
        },
        {
          name: 'blazePrizeMintTokenAccount',
          isMut: true,
          isSigner: false
        },
        {
          name: 'authority',
          isMut: true,
          isSigner: true
        },
        {
          name: 'authorityPrizeMintTokenAccount',
          isMut: true,
          isSigner: false
        },
        {
          name: 'systemProgram',
          isMut: false,
          isSigner: false
        },
        {
          name: 'tokenProgram',
          isMut: false,
          isSigner: false
        },
        {
          name: 'rent',
          isMut: false,
          isSigner: false
        }
      ],
      args: [
        {
          name: 'ix',
          type: {
            defined: 'InitBlazeIx'
          }
        }
      ]
    },
    {
      name: 'resolveBlaze',
      accounts: [
        {
          name: 'blaze',
          isMut: true,
          isSigner: false
        },
        {
          name: 'recentBlockhashes',
          isMut: false,
          isSigner: false
        },
        {
          name: 'entrants',
          isMut: false,
          isSigner: false
        },
        {
          name: 'tokenProgram',
          isMut: false,
          isSigner: false
        }
      ],
      args: []
    },
    {
      name: 'updateBlaze',
      accounts: [
        {
          name: 'blaze',
          isMut: true,
          isSigner: false
        },
        {
          name: 'project',
          isMut: true,
          isSigner: false
        },
        {
          name: 'authority',
          isMut: true,
          isSigner: true
        }
      ],
      args: [
        {
          name: 'ix',
          type: {
            defined: 'UpdateBlazeIx'
          }
        }
      ]
    }
  ],
  accounts: [
    {
      name: 'blaze',
      type: {
        kind: 'struct',
        fields: [
          {
            name: 'bump',
            type: 'u8'
          },
          {
            name: 'identifier',
            type: 'u64'
          },
          {
            name: 'entrants',
            type: 'publicKey'
          },
          {
            name: 'project',
            type: 'publicKey'
          },
          {
            name: 'prizeMint',
            type: 'publicKey'
          },
          {
            name: 'tokenMint',
            type: {
              option: 'publicKey'
            }
          },
          {
            name: 'tokenAccount',
            type: {
              option: 'publicKey'
            }
          },
          {
            name: 'treasury',
            type: {
              option: 'publicKey'
            }
          },
          {
            name: 'burnRate',
            type: 'u8'
          },
          {
            name: 'entrantFee',
            type: 'u64'
          },
          {
            name: 'start',
            type: 'i64'
          },
          {
            name: 'end',
            type: 'i64'
          },
          {
            name: 'winner',
            type: 'publicKey'
          },
          {
            name: 'prizeClaimed',
            type: 'bool'
          },
          {
            name: 'maxEntrantsPerWalletRate',
            type: 'u8'
          },
          {
            name: 'category',
            type: {
              option: 'string'
            }
          }
        ]
      }
    },
    {
      name: 'identifier',
      type: {
        kind: 'struct',
        fields: [
          {
            name: 'bump',
            type: 'u8'
          },
          {
            name: 'count',
            type: 'u64'
          }
        ]
      }
    },
    {
      name: 'entrants',
      type: {
        kind: 'struct',
        fields: [
          {
            name: 'total',
            type: 'u32'
          },
          {
            name: 'max',
            type: 'u32'
          }
        ]
      }
    }
  ],
  types: [
    {
      name: 'InitBlazeIx',
      type: {
        kind: 'struct',
        fields: [
          {
            name: 'prizeMint',
            type: 'publicKey'
          },
          {
            name: 'tokenMint',
            type: {
              option: 'publicKey'
            }
          },
          {
            name: 'tokenAccount',
            type: {
              option: 'publicKey'
            }
          },
          {
            name: 'treasury',
            type: {
              option: 'publicKey'
            }
          },
          {
            name: 'burnRate',
            type: {
              option: 'u8'
            }
          },
          {
            name: 'entrantFee',
            type: 'u64'
          },
          {
            name: 'maxEntrants',
            type: 'u32'
          },
          {
            name: 'start',
            type: 'i64'
          },
          {
            name: 'end',
            type: 'i64'
          },
          {
            name: 'maxEntrantsPerWalletRate',
            type: {
              option: 'u8'
            }
          },
          {
            name: 'category',
            type: {
              option: 'string'
            }
          }
        ]
      }
    },
    {
      name: 'UpdateBlazeIx',
      type: {
        kind: 'struct',
        fields: [
          {
            name: 'tokenMint',
            type: {
              option: 'publicKey'
            }
          },
          {
            name: 'tokenAccount',
            type: {
              option: 'publicKey'
            }
          },
          {
            name: 'treasury',
            type: {
              option: 'publicKey'
            }
          },
          {
            name: 'entrantFee',
            type: 'u64'
          },
          {
            name: 'burnRate',
            type: {
              option: 'u8'
            }
          },
          {
            name: 'start',
            type: 'i64'
          },
          {
            name: 'end',
            type: 'i64'
          },
          {
            name: 'maxEntrantsPerWalletRate',
            type: {
              option: 'u8'
            }
          },
          {
            name: 'category',
            type: {
              option: 'string'
            }
          }
        ]
      }
    }
  ],
  errors: [
    {
      code: 6000,
      name: 'InvalidProjectAuthority',
      msg: 'Invalid project authority'
    },
    {
      code: 6001,
      name: 'InvalidBlaze',
      msg: 'Invalid blaze'
    },
    {
      code: 6002,
      name: 'InvalidBlazePrizeMintTokenAccount',
      msg: 'Invalid blaze prize mint token account'
    },
    {
      code: 6003,
      name: 'InvalidUserPrizeMintTokenAccount',
      msg: 'Invalid user prize mint token account'
    },
    {
      code: 6004,
      name: 'InvalidUserTokenAccount',
      msg: 'Invalid user token account'
    },
    {
      code: 6005,
      name: 'ActiveBlaze',
      msg: 'Active blaze'
    },
    {
      code: 6006,
      name: 'BlazeNotStarted',
      msg: 'Blaze not started yet'
    },
    {
      code: 6007,
      name: 'BlazeEnded',
      msg: 'Blaze ended'
    },
    {
      code: 6008,
      name: 'ResolvedBlaze',
      msg: 'Resolved blaze'
    },
    {
      code: 6009,
      name: 'InvalidStartEnd',
      msg: 'Invalid start and end'
    },
    {
      code: 6010,
      name: 'NotEnoughEntrantsLeft',
      msg: 'Not enough entries left in the blaze'
    },
    {
      code: 6011,
      name: 'EntrantsAccountTooSmallForMaxEntrants',
      msg: 'Entrants account too small for max entrants'
    },
    {
      code: 6012,
      name: 'InvalidCalculation',
      msg: 'Invalid calculation'
    },
    {
      code: 6013,
      name: 'UserIsNotTheWinner',
      msg: 'You are not the winner'
    },
    {
      code: 6014,
      name: 'InvalidEntrants',
      msg: 'Invalid entrants'
    },
    {
      code: 6015,
      name: 'PrizeNotClaimedYet',
      msg: 'Prize not claimed yet'
    },
    {
      code: 6016,
      name: 'InvalidTokenMint',
      msg: 'Invalid token mint'
    },
    {
      code: 6017,
      name: 'MaxPurchaseLimitReached',
      msg: 'You have reached your 20% burn entry limit'
    },
    {
      code: 6018,
      name: 'PermissionDenied',
      msg: 'Permission denied'
    },
    {
      code: 6019,
      name: 'InvalidProject',
      msg: 'Invalid project'
    },
    {
      code: 6020,
      name: 'InvalidTokenAccount',
      msg: 'Invalid token or treasury account'
    }
  ]
};
